【发布时间】:2017-08-16 12:45:46
【问题描述】:
我的以下代码出错:(SQL Server 2008R2;在游标中获取两个数据库名称,然后将数据插入两个数据库中的 Table1)
DECLARE @SQL NVARCHAR(max)
DECLARE @DB VARCHAR(50)
DECLARE CUR_DB CURSOR FAST_FORWARD FOR
SELECT NAME FROM MASTER.SYS.DATABASES
WHERE DATABASE_ID IN ('5', '81')
;
OPEN CUR_DB;
FETCH NEXT FROM CUR_DB INTO @DB;
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @SQL = 'INSERT INTO @DB.dbo.Table1 VALUES (100, ''abc'', def'', 0)'
EXEC(@SQL)
FETCH NEXT FROM CUR_DB INTO @DB
END;
CLOSE CUR_DB;
DEALLOCATE CUR_DB;
错误:消息 102,级别 15,状态 1,第 1 行 '.' 附近的语法不正确。 消息 102,级别 15,状态 1,第 1 行 '.' 附近的语法不正确。
【问题讨论】:
-
没有名为
@DB的数据库。在执行之前尝试print @Sql。 -
这样做动态SQL的时候,一定要养成注释掉EXEC(@SQL)语句的习惯,换成PRINT @SQL;陈述。然后您可以看到您正在生成的 SQL,并轻松发现任何错误,或者将输出复制并粘贴到查询窗口中并尝试执行它以测试它是否良好。
-
@SqlZim 和 pmbAustin,感谢您的好建议。
标签: sql-server syntax cursor dynamic-sql