2017-01-03 12 views
-3

私は...、彼らが行われた賃料や販売を持っている場合、従業員の給与が大きくなりますトリガーを作るSQLトリガーマルチパート識別子エラー

CREATE TRIGGER tr_EmployeesSalaryCurrentSalary 
ON EmployeesSalary 
AFTER INSERT 
AS 
BEGIN 
UPDATE EmployeesSalary 
SET CurrentSalary=CurrentSalary+((MonthlySalesMade+MonthlyRentsMade)*200) 
WHERE EmployeeID =inserted.EmployeeID; 
END 

が、私は奇妙なエラーを取得していています

複数の部分の識別子 "inserted.EmployeeID"はバインドできませんでした。

私の間違いは何ですか?

+1

エラーが正しいです。どこに挿入されますか? – GurV

+0

実際にはエラーの意味を理解していません – MitkoZ

+0

[ドキュメント](https://msdn.microsoft.com/en-us/library/ms189799.aspx)とその例を見ましたか?あるいは、シンタックスがうまくいくと思うようにトリガーを書くだけでしたか? (ヒント:例の 'inserted'は' FROM'/'JOIN'節にあることに気付くかもしれませんあなたの試みでは、' inserted'はあなたの 'UPDATE'ステートメントが言及しているテーブルではありません。 'WHERE'節はどこからも外れています。最初に簡単な例を試してみてください。あなたが既にそれを知っていると思うように書くだけでは...) –

答えて

1

FROM句のinserted「表示」を参照する必要があります。一つの方法は、単純にINを使用しています。

CREATE TRIGGER tr_EmployeesSalaryCurrentSalary ON EmployeesSalary 
AFTER INSERT 
AS 
BEGIN 
    UPDATE EmployeesSalary 
     SET CurrentSalary = CurrentSalary + ((MonthlySalesMade + MonthlyRentsMade) * 200) 
    WHERE EmployeeID IN (SELECT i.EmployeeID FROM inserted i); 
END; 
+0

あなたのコードが動作するようですが...私のテーブルの更新は他のテーブルの2つのトリガーに基づいているため動作しません...他のテーブルからの他のトリガーが活性化された? – MitkoZ

+0

例: - напроцент MonthlySalesMade INT DEFAULT 0、 MonthlyRentsMadeのINT DEFAULT 0、 CONSTRAINT FK_EmployeesSalary_Employees FOREIGN KEY(社員これはEmployeesSalary ( 社員INT NOT NULL PRIMARY KEY、 はCurrentSalaryマネーDEFAULT 0、私のテーブル 'CREATE TABLEをあります) REFERENCES従業員(EmployeeID)、 CONSTRAINT CHK_EmployeesSalary CHECK(CurrentSalary> = 0およびMonthlySalesMade> = 0およびMonthlyRentsMade> = 0) ); 'と私はMonthlyRentsMadeまたはMonthlySalesMadeが更新されたときにトリガーを起動したい(ただし、他のテーブルのトリガーによって更新されます) – MitkoZ

+1

@MitkoZ「動作しません」とはどういう意味ですか?あなたのテーブル構造、他のトリガー、そして何が起きているかについての情報をあなたの質問に追加してください。コメントはコードにとって恐ろしい場所です。 –

0

あなたからに挿入NOCOUNT ONと使用を設定する必要があります。

EXEC sp_configure 'show advanced options', 1; 
GO 
RECONFIGURE ; 
GO 
EXEC sp_configure 'nested triggers', 1 ; 
GO 
RECONFIGURE; 
GO 
:あなたは、ネストされたトリガを許可していない可能性がありますかのようですね

CREATE TRIGGER tr_EmployeesSalaryCurrentSalary 
ON EmployeesSalary 
AFTER INSERT 
AS 
BEGIN 
SET NOCOUNT ON -- new code 
UPDATE EmployeesSalary 
SET CurrentSalary=CurrentSalary+((MonthlySalesMade+MonthlyRentsMade)*200) 
WHERE EmployeeID IN (Select inserted.EmployeeID from inserted); 
END 

+0

私はまだ同じエラーがある – MitkoZ

+0

EmployeeIDは、 EmployeeSalary? – cloudsafe

+0

はいそれはあります。 – MitkoZ

関連する問題