1.如何用SQL语句复制表的结构,复制整个数据库
1.复制表结构:只能复制表的字段,不能复制主键、索引等 select top 0 * into 新表名 from 原表名2.复制整个数据库结构及数据:create datebase Test --创建目标数据库 exec P_CopyDB @Source_DB='aspnet',@Des_DB='test' --把源数据库整个复制到目标数据库 P_CopyDB存储过程创建过程如下-----------------------创建存储过程开始-------------------- create proc P_CopyDB @Des_DB sysname, --目标数据库 @Obj_Type nvarchar(4000)=N'',--复制的对象类型,可以是下列字符串列表: -- O 所有对象,D 默认值,R 规则,P 存储过程 -- T 表,TR 触发器,DT 用户定义数据类型 -- V 视图,DATA 数据,DEL 删除目标对象 @Source_DB sysname=N'', --源数据库 @ServerName sysname=N'', --服务器名 @UserName sysname=N'', --用户名,不指定则表示使用 Windows 身份登录 @pwd sysname=N'' --密码 AS SET NOCOUNT ON DECLARE @srvid int,@Dbid int,@S_dbid int,@D_dbid int,@TransferID int, @err int,@src varchar(255), @desc varchar(255) IF ISNULL(@ServerName,N'')=N'' SET @ServerName='.'--默认为本地数据库 IF ISNULL(@Source_DB,N'')=N'' SET @Source_DB=DB_NAME()--创建sqldmo对象· EXEC @err=sp_oacreate 'sqldmo.sqlserver',@srvid OUT IF @err<>0 GOTO lb_Err--连接服务器 IF ISNULL(@UserName,N'')=N'' --使用 Windows 身份登录 BEGIN EXEC @err=sp_oasetproperty @srvid,'loginsecure',-1 IF @err<>0 GOTO lb_Err EXEC @err=sp_oamethod @srvid,'connect',NULL,@servername END ELSE EXEC @err=sp_oamethod @srvid,'connect',NULL,@servername,@UserName,@pwd IF @err<>0 GOTO lb_Err--获取数据库集 EXEC @err=sp_oagetproperty @srvid,'databases',@Dbid OUT IF @err<>0 GOTO lb_Err--选择源数据库 EXEC @err=sp_oamethod @Dbid,'item',@S_dbid OUT,@Source_DB IF @err<>0 GOTO lb_Err--选择目标数据库 EXEC @err=sp_oamethod @Dbid,'item',@D_dbid OUT,@Des_DB IF @err<>0 GOTO lb_Err--设置复制的对象 EXEC @err=sp_oacreate 'SQLDMO.Transfer',@TransferID OUT IF @err<>0 GOTO lb_Err--设置目标服务器信息 EXEC @err=sp_oasetproperty @TransferID,'DestServer',@ServerName IF @err<>0 GOTO lb_Err --设置连接用户 IF ISNULL(@UserName,N'')=N'' --使用 Windows 身份登录 BEGIN EXEC @err=sp_oasetproperty @TransferID,'DestUseTrustedConnection',1 IF @err<>0 GOTO lb_Err END ELSE BEGIN EXEC @err=sp_oasetproperty @TransferID,'DestLogin',@UserName IF @err<>0 GOTO lb_Err EXEC @err=sp_oasetproperty @TransferID,'DestPassword',@pwd IF @err<>0 GOTO lb_Err END --设置复制对象信息 EXEC @err=sp_oasetproperty @TransferID,'DestDatabase',@Des_DB IF @err<>0 GOTO lb_Err DECLARE tb CURSOR FAST_FORWARD LOCAL FOR SELECT Name FROM( SELECT KeyWord=N',D,', Name=N'CopyAllDefaults' UNION ALL SELECT KeyWord=N',O,', Name=N'CopyAllObjects' UNION ALL SELECT KeyWord=N',R,', Name=N'CopyAllRules' UNION ALL SELECT KeyWord=N',P,', Name=N'CopyAllStoredProcedures' UNION ALL SELECT KeyWord=N',T,', Name=N'CopyAllTables' UNION ALL SELECT KeyWord=N',TR,', Name=N'CopyAllTriggers' UNION ALL SELECT KeyWord=N',DT,', Name=N'CopyAllUserDefinedDatatypes' UNION ALL SELECT KeyWord=N',V,', Name=N'CopyAllViews' UNION ALL SELECT KeyWord=N',DATA,',Name=N'CopyData' UNION ALL SELECT KeyWord=N',DEL,', Name=N'DropDestObjectsFirst')A WHERE CHARINDEX(KeyWord, CASE WHEN ISNULL(@Obj_Type,N'')='' THEN ',O,DATA,' ELSE @Obj_Type END)>0 OPEN tb FETCH tb INTO @src WHILE @@7a686964616fe59b9ee7ad9431333339653730FETCH_STATUS=0 BEGIN EXEC @err=sp_oasetproperty @TransferID,@src,1 IF @err<>0 GOTO lb_Err FETCH tb INTO @src END CLOSE tb DEALLOCATE tb--复制对象 EXEC @err=sp_oamethod @S_dbid,'Transfer',null,@TransferID IF @err<>0 GOTO lb_Err--结束 SET @err=0 GOTO lb_Exit--错误处理 lb_Err: EXEC sp_oageterrorinfo NULL, @src OUT, @desc OUT RAISERROR(N'错误编号 %#x, 错误源 "%s", 错误描述 "%s"',16,1,@err,@src,@desc) RETURN -1 lb_Exit: EXEC sp_OADestroy @Dbid EXEC sp_OADestroy @srvid EXEC sp_OADestroy @TransferID RETURN @err GO-----------------------创建存储过程结束--------------------。
2.Excel vba 跨表查询: 希望在sheet1中输入关键字,到sheet2中查询与
临时写的,没经过调试,功能是记录sheet1的A1里的内容,在sheet2里面找到相应的单元格,记录行数和列数,然后显示在sheet1的A2和A3中
sub test()
dim keyword,keyrow,keycol as string
sheets("Sheet1").select
keyword=range("A1").formular1c1
sheets("Sheet2").select
Cells.Find(What:=keyword, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _ '注意keyword在这里
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, MatchByte:=False, SearchFormat:=False).Activate
keyrow=activecell.row
keycol=activecell.column
sheets("Sheet1").select
range("A2").formular1c1=keyrow
range("A3").formular1c1=keycol
end sub
转载请注明出处51数据库 » selectkeyword
喜欢郑凯