2016-09-30 10 views
0

私はストアドプロシージャに追加したい次のスクリプトを持っています。今、私がこれを実行すると、SELECTステートメントはすべてのINSERTステートメントを出力します。これらの挿入ステートメントをストアドプロシージャ内から自動的に実行したいと思います。Insert文のSQL生成

私は動的SQLを実行してさまざまな方法を試しましたが、私のスクリプトが参照するシステムテーブルのせいでほとんど成功しませんでした。とにかく、適切なINSERT文を生成して同時に実行しますか?

私はこれにSQL Serverを使用しています。

MY CODE:

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は方法です:

はあなたの動的SQLの試みのこのわずかな修正をお試しください。試してみて失敗した場合は、デバッグできるように投稿してください。 –

+0

構文 'set ... =(select)'を使わないでください。それは私の目を傷つけている。本当に必要なのは 'select @sql = 'insert into ...' from ... where ...' – ajeh

答えて

2

STUFFステートメントを別の変数に挿入し、最後に動的SQLを使用して変数を実行します。

変数内のINSERT文は、必ずセミコロンで区切ります。

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 Rowsが返されます。 – webdad3