我有以下脚本要添加到存储过程中。现在,当我运行它时,SELECT语句打印出所有INSERT语句。我想从我的存储过程中自动运行这些insert语句。
我已经通过执行动态sql尝试了各种方法但是我没有成功,主要是因为我的脚本引用了系统表。反正有没有生成适当的INSERT语句并同时运行它们?
我正在使用SQL Server。
我的代码:
DECLARE @tablename as varchar(255) = 'tblsmoker'
DECLARE @SQL VARCHAR(MAX)
SET @SQL = (SELECT 'INSERT INTO tblCheck (ColumnName,ColumnValue,SID,SName,RID,RName)VALUES (''' + QUOTENAME(c.name) + ''',NULL,0,NULL,0,NULL);'
FROM sys.columns c
WHERE c.object_id = OBJECT_ID(@tablename))
print @SQL
EXEC(@SQL)
这段代码给了我:
子查询返回的值超过1。这是不允许的 子查询跟随=,!=,<,< =,>,> =或当子查询用作 表达。
答案 0 :(得分:2)
将插入语句的STUFF转换为另一个变量,然后最后使用动态sql来执行变量。
确保使用分号分隔变量内的INSERT语句。
尝试对动态sql尝试稍作修改:
DECLARE @tablename as varchar(255) = 'tblsmoker'
DECLARE @SQL VARCHAR(MAX) = '';
SELECT @SQL = @SQL + 'INSERT INTO tblCheck (ColumnName,ColumnValue,SID,SName,RID,RName)VALUES (''' + QUOTENAME(c.name) + ''',NULL,0,NULL,0,NULL);'
FROM sys.columns c
WHERE c.object_id = OBJECT_ID(@tablename)
print @SQL
EXEC(@SQL)