SQL Server 2005 では、複数の値を次のように挿入できます。
INSERT INTO
TableName
(col1, col2, col3)
SELECT
'text1', 'text2', 1
UNION ALL
'text3', 'text4', 2
動的SQLを使用して挿入するにはどうすればよいですかEXEC @sql
私が走るとき
EXEC ' INSERT INTO
TableName
(col1, col2, col3)
SELECT
''text1'', ''text2'', 1 -- using double quotation marks to escape
UNION ALL
''text3'', ''text4'', 2
'
というエラーが表示されます
間違った構文
'INSERT INTO Tablename(col1, col2, col3) SELECT 'text1', 'text2', 1 UNION ALL SELECT '.
なぜ実行されないのですか?また、SQL が入力した SQL ステートメント全体を出力しないのはなぜですか? 2番目の選択後にトリミングされるのはなぜですか?
誰か私がこれを書くのを手伝ってくれますか?
編集
解決策を試した後Devart's
。SQL Server で正常に動作し、ASP.NET アプリケーションからも動作しました。しかし、問題は、テキストのいずれかにスペースがある場合に発生します。
EXEC ('
INSERT INTO TableName (col1, col2, col3)
SELECT ''text1'' AS t1, ''text2'' AS t2, 1 AS t3
UNION ALL
SELECT ''text3'', ''text4'', 2
')
これはうまくいきます...
しかし
EXEC ('
INSERT INTO TableName (col1, col2, col3)
SELECT ''text1'' AS t1, ''text2'' AS t2, 1 AS t3
UNION ALL
SELECT ''text3 with space in it'', ''text4 more spaces'', 2
')
SSMS でのみ正常に動作しますが、asp.net アプリケーションからは動作しません。
コードは次のとおりです。
var cmd = new SqlCommand
{ commandText = "myProcedure", commandType = CommandType.StoredProcedure, connection = myGlobalConnection };
cmd.Parameters.AddWithValue("@sqlParam", thatLongDynamicString);
cmd.ExecuteNonQuery();
throw はIncorrect syntax error
nearwith
および nearmore
ですが、テキスト列にスペースがない場合。それは正常に動作します。
なぜこうなった?