PRINTコマンドを介して出力することで別のSQLステートメントを生成するSQLステートメントがあります。今のところ、SQLエディターで手動で実行し、結果の文字列クエリをコピーして、別のウィンドウでそのクエリを実行する必要があります。
.NETコンソールアプリを使用して自動化したいと思います。.NETで出力されたPRINTステートメントをキャプチャすることは可能ですか?SQL PRINT出力をキャプチャする別の方法はありますか?
PRINTコマンドを介して出力することで別のSQLステートメントを生成するSQLステートメントがあります。今のところ、SQLエディターで手動で実行し、結果の文字列クエリをコピーして、別のウィンドウでそのクエリを実行する必要があります。
.NETコンソールアプリを使用して自動化したいと思います。.NETで出力されたPRINTステートメントをキャプチャすることは可能ですか?SQL PRINT出力をキャプチャする別の方法はありますか?
「印刷コマンドの出力をキャプチャするにはどうすればよいですか」という直接の質問に対する答えを探してここに来ましたが、以前の答えを拡張したいと思います。
複数の print ステートメントを使用して sql コマンドを作成している場合は、set コマンドでピースを連結できます
SET @sqlCommand = @sqlCommand + @newPart;
残念ながら、@sqlCommand の最大サイズを超えていないのに、sqlserver が超えたと判断するため、問題が発生することがあります。私はピースを別々に保持することでこれを回避します。とにかく同じピースのバリエーションが必要になることがよくあります。次に、次のように exec コマンドでそれらを連結します。
EXEC (
'MERGE ' + @targetTable + ' t ' +
'USING ' + @sourceTable + ' s ' +
'ON ' + @keycondition + ' ' +
'WHEN MATCHED AND ' + @updateCondition + ' THEN ' +
'UPDATE SET ' + @updateColumns + ' ' +
'WHEN NOT MATCHED BY TARGET THEN ' +
'INSERT (' + @insertTargetColumns + ') ' +
'VALUES (' + @insertSourceColumns + ') ' +
'WHEN NOT MATCHED BY SOURCE THEN '
'UPDATE SET deleteFlag = ''D'', updDtTm = GETDATE()'
)
お役に立てれば。スナップショットから増分更新に移行しているため、sourceTable には deleteFlag が含まれており、最後の句は使用していません。
それ以外の
Print @sql
する
Select @sql
必要に応じてキャプチャし (ADO、Linq2Sql、EF)、ステートメントを通常どおり実行します。レコードセットのようにSQLを返すことにより、実際にデータを返すように設計されていないことを試みる代わりに、フレームワークがデータを処理する通常の方法に頼ることができます(あなたのSQLは実際に返されるデータです).
必要に応じてそのステップをスキップして実行することもできます
EXEC sp_executesql @sql
往復全体をバイパスします。 EXECおよびsp_ExecuteSql のドキュメント。
SQLサーバー/オラクルを使用している場合、動的SQLを非常に簡単に実行できます
SQL サーバーの場合、EXEC または sp_executesql のいずれかを使用できます。
DECLARE @sqlCommand varchar(1000)
SET @sqlCommand = 'SELECT * FROM SOME_TABLE'
--Use Exec
EXEC (@sqlCommand)
--or you can use the sp_executesql
EXECUTE sp_executesql @sqlCommand
Oracle を使用している場合は、EXECUTE IMMEDIATE を使用する必要があります。