2016-09-30 99 views
0

我有我想添加到存储过程中的以下脚本。现在,当我运行这个SELECT语句打印出所有的INSERT语句。我想从我的存储过程中自动运行这些插入语句。插入语句的SQL生成

我试过各种方式执行动态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) 

此代码是给我:

子查询返回多个值。当 子查询遵循=,!=,<,< =,>,> =或当子查询用作 表达式时,这是不允许的。

+0

动态sql是这样的。如果您尝试过并且不成功,请发布您的尝试,以便我们可以对其进行调试。 –

+0

请不要使用'set ... =(select)'语法。它伤害了我的眼睛。所有你真正需要的是'select @sql ='insert into ...'from ... where ...' – ajeh

回答

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) 
+0

@TabAllerman - 我用我的尝试更新了这个问题。 – webdad3

+0

你很接近,你只需要连接每行的SQL变量。 –

+0

我更新了我的代码来执行连接,并执行查询,但是当我检查tblCheck表时 - NO行返回。 – webdad3