任务举例:
假设有两个数据库A和B。
数据库A中有以深证(SZXXXXXX)和上证(SHXXXXXX)股票代码命名的数据表,现在想把以SZ开头的数据表挪到B库中。
命名并打开一个游标'cur'并且从INFORMATION_SCHEMA.TABLES获得数据库中表的命名信息,以LIKE 'SZ%'作为筛选条件。
USE A
DECLARE CUR CURSOR FOR
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'SZ%'
FOR READ ONLY
OPEN CUR
申明两个局部变量@LEN和@NAME,分别用于储存迭代次数和游标导出的表名。
DECLARE @LEN INT,@NAME CHAR(8)
为@LEN赋值,将要执行移动的表个数赋给它。
SELECT @LEN = COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'SZ%'
进入数据库B进行循环迭代,通过游标获得表名,通过EXEC执行数据表的转移语句并打印当前进程。
USE B
WHILE @LEN != 0
BEGIN
SET @LEN -= 1 --每执行一次从@LEN中扣除一次
FETCH NEXT FROM CUR INTO @NAME -- 通过游标获得表名
EXEC('SELECT * INTO '+@NAME+' FROM A.'+@NAME) -- 执行数据表的转移语句
PRINT @NAME
END
最后记得关闭游标并且释放。
CLOSE CUR
DEALLOCATE CUR
完整的案例代码如下:
USE A
DECLARE CUR CURSOR FOR
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'SZ%'
FOR READ ONLY
OPEN CUR
DECLARE @LEN INT,@NAME CHAR(8)
SELECT @LEN = COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'SZ%'
USE B
WHILE @LEN != 0
BEGIN
SET @LEN -= 1
FETCH NEXT FROM CUR INTO @NAME
EXEC('SELECT * INTO '+@NAME+' FROM A.'+@NAME)
PRINT @NAME
END
CLOSE CUR
DEALLOCATE CUR