Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检测使用ExecuteOnQuery创建的触发器_C#_Sql Server_Tsql - Fatal编程技术网

C# 如何检测使用ExecuteOnQuery创建的触发器

C# 如何检测使用ExecuteOnQuery创建的触发器,c#,sql-server,tsql,C#,Sql Server,Tsql,我有以下命令在数据库中创建触发器 command.ExecuteNonQuery(); 触发器已成功创建。但如何检测它是否是在执行命令时创建的呢 到目前为止,我设法执行了单独的命令来检查数据库中是否存在trigger allready,但我需要的是在创建它时进行检查 string insert = " CREATE TRIGGER TraNag_UpdateInsertOpis ON dbo.TraNag" + " FOR INSERT,UPDATE" + " AS" + " DECLAR

我有以下命令在数据库中创建触发器

command.ExecuteNonQuery();
触发器已成功创建。但如何检测它是否是在执行命令时创建的呢

到目前为止,我设法执行了单独的命令来检查数据库中是否存在trigger allready,但我需要的是在创建它时进行检查

string insert =  " CREATE TRIGGER TraNag_UpdateInsertOpis ON dbo.TraNag"
+ " FOR INSERT,UPDATE"
+ " AS"

+ " DECLARE @OpisInsert varchar(1024)"
+ " DECLARE @TrnSymbolInsert varchar(40)"

+ " select @TrnSymbolInsert = TrN_Symbol, @OpisInsert = Trn_Opis from inserted "

+ " IF (@TrnSymbolInsert = 'MMW')"
+ " BEGIN"
+ " IF NOT EXISTS("
+ " SELECT Mag_Symbol"
+ " FROM dbo.Magazyny"
+ " WHERE Mag_Symbol like @OpisInsert"
+ " )"
+ " BEGIN"
+ " RAISERROR('Error NOT FOR STACKOVERFLOWWWW !!! : %s', 16, 1, @OpisInsert);"
+ " END END";

只需在运行ExecuteOnQuery之前和之后检查触发器是否存在。这将检测触发器是否已经创建,或者是否由您的命令创建,或者根本没有创建。

好吧,直到命令完成,它才被创建,所以我不确定在此之前您如何检查它。执行两个命令有什么问题?有没有理由认为它还没有被创建?你能显示command的commandtext吗?它是否包含CREATE TRIGGER语句?command.ExecuteNonQuery只执行SQL命令并忽略任何结果集。如果要在一批中执行多个命令,请修改命令对象中的SQL语句。命令文本已更新。再看这里:所以要么1。选择存在时的大小写从sys.triggers中选择1,其中name='TraNag_UpdateInsertOpis',然后选择1,否则0结束或2。如果对象_ID'dbo.TraNag_UpdateInsertOpis','TR'不是null如果触发器在ExecuteOnQuery之前不存在,在ExecuteOnQuery之后确实存在,则表示已创建触发器。触发器可能是在该间隔期间由另一个会话创建的。在这种情况下,可能没有竞争,但一般来说,必须考虑到这一点。