2016-12-12 6 views
0

私はトリガを作成し、その内部に動的SQLが実行されます。ここでDynamic Sqlが失敗したことを識別する方法は?

サンプルスクリプトです:

私はいくつかの値に@Textを指定する場合、それは(Execがaffetected 1行を表示した後)動作しますが、私がnullを指定しています、 レコードがテーブルに追加されませ(メッセージ:クエリが実行さレコードがサンプルテーブルに追加されない場合、plsは動的挿入なしでサンプル2に追加されます。動的execを正しく検出する方法はありません。テーブルの最後のIDを取得する必要はありません。それを行う?

declare @Inserttbl nvarchar(4000) 
declare @TableName varchar(50) 
declare @PId int 
declare @Text varchar(50) 
declare @count int 
declare @Status int 
set @TableName ='sample' 
set @Text = null 
set @PId = 3 
set @Status =1 

set @Inserttbl = ' Insert into Test.dbo.' [email protected] +' values ('[email protected]+','[email protected]+','[email protected]+')' 
exec sp_executesql @Inserttbl 
+0

文字列を作成し、文字列としてnullを追加するとどうなりますか? – TZHX

+0

質問:このコードでSQLインジェクションを防ぐためにsqlパラメータを使用することをお勧めします。 – John

+0

[SQL Server String Concatenation with Null]の重複の可能性があります(http://stackoverflow.com/questions/2916791/sql-server-string-concatenation-with-null) – TZHX

答えて

0

SQL文の文字列を作成するには、COALESCEを使用する必要があります。 @ROWCOUNTを使用して、文を提供しているインサートが正しく形成されているかどうかを確認することができます。

関連する問題