2

我正在尝试创建一个触发器,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();

此外,在此之上,我有 SQLCommandsCREATE TABLE并且它们可以正常工作。

USE [databasename]我之前试过CREATE TRIGGER,还是不行。我删除了连接+"korisnik.KorisnikID"并取了干净的名字,但仍然无法执行它。

4

3 回答 3

1

ExecuteNonQuery的文档指出

您可以使用 ExecuteNonQuery 来执行目录操作(例如,查询数据库的结构或创建数据库对象,如表),或者通过执行 UPDATE、INSERT 或 DELETE 语句来更改数据库中的数据而不使用 DataSet。

哪一种证实了我的怀疑:您不能以这种方式创建触发器。

如果要在代码中创建触发器,请使用CLR Trigger

于 2015-06-28T01:49:35.787 回答
1

您可以在数据库中创建存储过程来创建触发器,然后传递正确的参数。使用 ado.net 调用存储过程并传递参数。

于 2015-06-28T03:08:26.097 回答
0

如前所述,应在设计时创建触发器。然而,如下是可能的ExecuteNonQuery

使用EXEC语句和存储过程sp_executesql

cmd.CommandText = "EXEC sp_executeSQL N'CREATE TRIGGER myTrigger ON myTable...'";
cmd.ExecuteNonQuery();
于 2018-12-12T11:23:58.967 回答