2012-09-14 18 views
0

我看了這個Help with SQL Server Trigger to truncate bad data before insert,但沒有解決我關於存儲過程的問題。如何在SQL Server 2005中的存儲過程中的INSERT語句之前觸發?

更新

因爲我的問題Why cannot create global temporary table or truncate it when call a stored procedure from C# code?當從存儲過程截斷表時,它從C#代碼調用。

末更新

存儲過程是

ALTER PROCEDURE [dbo].[aProcedure] 
    @val1 VARCHAR(255), 
    @val2 VARCHAR(255), 
    ... 
AS 
BEGIN 
    SELECT @sql = '//Do SELECT statement' 

    INSERT INTO dbo.MyTable(....) 

    SELECT @paramList = ' /*list of parameters*/'; 

    EXEC sp_executesql @sql, @paramList, ... parameters 
END 

我使用的觸發(我在SQL初學者)

CREATE TRIGGER MyTrigger ON dbo.MyTable 
FOR INSERT 
AS 
BEGIN 
    TRUNCATE dbo.MyTable 
END 

如何觸發,從當存儲過程的值插入到dbo.MyTable,它截斷我的表冷杉st和之後,使INSERT操作?

我從MSDNCodeProject閱讀文檔。

謝謝

+2

哇 - 截斷表INSERT觸發器中應引起許多lulz與您的同事,但它是一個很好的例子,爲什麼觸發器應被視爲最後的手段。 – StuartLC

+0

@nonnb:閱讀我更新的問題。 –

+1

您是否注意到您似乎正在破碎的解決方案之上打破破碎的解決方案?正如我在上一個問題中所建議的那樣,也許你需要退後一步,看看你正在處理的總體問題(而不是你已經決定的*解決方案的當前問題),看看是否有更好的方法如何做到這一點? –

回答

3

在存儲過程本身中截斷表。 無需編寫觸發器。 觸發會減慢你的進程

ALTER PROCEDURE [dbo].[aProcedure] 
    @val1 VARCHAR(255), 
    @val2 VARCHAR(255), 
    ... 
AS 
BEGIN 
    SELECT @sql = '//Do SELECT statement' 

    TRUNCATE table dbo.MyTable -- < add truncate here 
    INSERT INTO dbo.MyTable(....) 

    SELECT @paramList = ' /*list of parameters*/'; 

    EXEC sp_executesql @sql, @paramList, ... parameters 
END 
+0

我知道,但我需要我的問題:http://stackoverflow.com/questions/12407728/why-cannot-create-global-temporary-table-or-truncate-it-when-call-a-stored-proce –

+0

閱讀我更新的問題! –

0
CREATE TRIGGER MyTrigger ON dbo.MyTable 
AFTER INSERT 
AS 
BEGIN 
    TRUNCATE dbo.MyTable 
END 
+0

不是'後'。只是'之前'! –

相關問題