0

我阅读了此SQL Server 触发器帮助以在插入之前截断错误数据,但在存储过程时没有解决我的问题。

更新

由于我的问题,当从 C# 代码调用存储过程时,为什么不能创建全局临时表或截断它?当从 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阅读了文档。

谢谢

4

2 回答 2

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
于 2012-09-14T06:25:26.747 回答
0
CREATE TRIGGER MyTrigger ON dbo.MyTable
AFTER INSERT
AS
BEGIN
    TRUNCATE dbo.MyTable
END
于 2012-09-14T06:28:28.243 回答