2015-11-26 51 views
0

我在我的數據庫中有一個Employee表。值通過asp.net頁面插入到此表中。我想在員工插入時觸發一個觸發器,只有當用戶具有「id = 1110」時才允許插入,所有其他用戶插入必須被拒絕。我不知道如何傳遞用戶標識作爲觸發參數。任何人都可以請幫助我?將參數傳遞給通過asp.net的SQL觸發器

+0

當ID 1110從哪裏來? – ninja

+0

你需要在你的觸發器中添加這個條件。 –

+0

1110是來自管理頁面的身份證....管理員登錄到他的頁面,他可以註冊一個新員工...我想檢查管理'1110'是否已執行註冊。 –

回答

0

觸發器不能傳遞參數 - 你必須對數據庫的操作範圍內工作。因此,除非Employee表具有引用創建更改的用戶的ID的CreateBy或LastUpdateBy,否則您需要將INSERT包裝到存儲過程中,該存儲過程將在執行INSERT之前執行該檢查。

如果碰巧你的Employee表中有一個包含執行更改的用戶的ID的CreateBy,然後觸發,例如下面這應該工作:

CREATE TRIGGER tg_Employees_RegisterAdminOnly ON dbo.Employees 
AFTER INSERT AS 
BEGIN 
    IF EXISTS (SELECT * FROM INSERTED WHERE CreateBy <> 1110) BEGIN 
     RAISERROR('Unauthorized registration', 16, 1) 
     ROLLBACK 
     RETURN 
    END 
END 
GO 
+0

謝謝賈森....我要包裝插入存儲過程.. :-) –

0

您可以在創建後觸發調用存儲過程在以下C#代碼:

--table|start 
CREATE TABLE dbo.z_Employee (ID INT IDENTITY(1, 1), Name VARCHAR(100), UserModify SMALLINT) 
--table|end 



--stored procedure for inserting new employee|start 
CREATE PROC dbo.z_AddEmployee(@Name VARCHAR(100), @UserModify SMALLINT) 
AS 
--for debugging|start 
--DECLARE @Name VARCHAR(100) 
-- , @UserModify SMALLINT = 1112 
--for debugging|end 
INSERT dbo.z_Employee (Name, UserModify) 
VALUES (@Name, @UserModify) 

--for debugging|start 
--SELECT e.* 
--FROM dbo.z_Employee e WITH(NOLOCK) 
--for debugging|end 
--stored procedure for inserting new employee|end 



--trigger for disallowing inserts|start 
CREATE TRIGGER dbo.z_DoNotAllowOtherUser 
ON dbo.z_Employee 
FOR INSERT 
AS 

IF EXISTS 
    (SELECT TOP 1 i.ID 
    FROM INSERTED i 
    WHERE i.UserModify <> 1110) 
BEGIN 
    DELETE e 
    FROM dbo.z_Employee e WITH(NOLOCK) 
     JOIN INSERTED i ON i.ID = e.ID 
END 
--trigger for disallowing inserts|end 
相關問題