2016-09-30 98 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