下面是我想要添加到存储过程中的脚本。现在,当我运行这个命令时,SELECT语句会打印出所有INSERT语句。我想在我的存储过程中自动运行这些insert语句。
我尝试过各种执行动态sql的方法,但是我没有成功,主要是因为我的脚本引用的系统表。是否存在生成正确的INSERT语句并同时运行它们的方法?
为此,我将使用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)这段代码给了我:
子查询返回的值超过一个。当子查询跟随=、!=、<、<=、>、>=或子查询用作表达式时,这是不允许的。
发布于 2016-09-30 18:30:43
将insert语句填充到另一个变量中,然后使用动态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)https://stackoverflow.com/questions/39797871
复制相似问题