我正在尝试使用SqlCommand
创建触发器,我收到错误:
关键字'触发'
附近的语法不正确
当我在SQL Server中复制相同的查询时,它正在成功执行。
以下是SQL命令的外观。
command.CommandText = "CREATE TRIGGER tr_Korisnik" + korisnik.KorisnikID + "_FakturaStavka_ForInsert " +
"on Korisnik"+korisnik.KorisnikID+"_FakturaStavka " +
"FOR INSERT " +
"AS " +
"BEGIN " +
"DECLARE @ID int " +
"DECLARE @FakturaID int " +
"DECLARE @StavkaBr int " +
"SET @ID = (SELECT DokumentID from inserted) " +
"SET @FakturaID = (SELECT FakturaID from inserted) " +
"UPDATE Korisnik"+korisnik.KorisnikID+"_Fakturi SET BrStavki = BrStavki+1 WHERE DokumentID = @FakturaID " +
"SET @StavkaBr = (SELECT Korisnik"+korisnik.KorisnikID+"_Fakturi.BrStavki FROM Korisnik"+korisnik.KorisnikID+"_Fakturi WHERE DokumentID = @FakturaID) " +
"UPDATE Korisnik"+korisnik.KorisnikID+"_FakturaStavka SET StavkaBroj = @StavkaBr WHERE DokumentID = @ID END";
command.ExecuteNonQuery();
此外,上面我有CREATE TABLE
的SQLCommands,它们正常工作。
我在USE [databasename]
之前尝试了CREATE TRIGGER
,但仍然没有。
我删除了连接+"korisnik.KorisnikID"
并创建了干净的名称,仍然无法执行它。
答案 0 :(得分:1)
documentation for ExecuteNonQuery表示
您可以使用ExecuteNonQuery执行目录操作(例如,查询数据库的结构或创建数据库对象,例如表),或者通过执行UPDATE,INSERT或更改数据库而不使用DataSet来更改数据DELETE语句。
哪种证实了我的怀疑:你无法以这种方式创建触发器。
如果要在代码中创建触发器,请使用CLR Trigger。
答案 1 :(得分:1)
您可以在数据库中创建存储过程以创建触发器,然后传递正确的参数。使用ado.net调用存储过程并传递params。
答案 2 :(得分:0)
就像已经提到的那样,应该在设计时创建触发器。
不过,ExecuteNonQuery
可以做到如下。
使用EXEC
语句和存储过程sp_executesql
:
cmd.CommandText = "EXEC sp_executeSQL N'CREATE TRIGGER myTrigger ON myTable...'";
cmd.ExecuteNonQuery();