如何在SQL Server 2005中的存储过程中的INSERT语句之前触发?

时间:2012-09-14 06:22:50

标签: sql sql-server-2005

我读了这个Help with SQL Server Trigger to truncate bad data before 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 ,这会先截断我的表,然后再进行INSERT操作?

我从MSDNCodeProject阅读了文档。

谢谢

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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