我尝试使用 SqlCommand
创建触发器,但收到错误:
Incorrect syntax near the keyword 'trigger'
当我在 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,并且它们工作正常。
我在CREATE TRIGGER
之前尝试了USE [databasename]
,但仍然没有任何结果。
我删除了连接 +"korisnik.KorisnikID"
并创建了干净的名称,但仍然无法执行它。
最佳答案
documentation for ExecuteNonQuery指出
You can use the ExecuteNonQuery to perform catalog operations (for example, querying the structure of a database or creating database objects such as tables), or to change the data in a database without using a DataSet by executing UPDATE, INSERT, or DELETE statements.
这证实了我的怀疑:你不能用这种方式创建触发器。
如果您想在代码中创建触发器,请使用 CLR Trigger .
关于c# - 如何使用 ADO.NET 创建数据库触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31095332/