sql-server - SQL触发器执行问题

标签 sql-server sql-server-2005 t-sql triggers

我有以下触发器。插入新行时,存储过程无法获取变量@ItemID 的参数值。我试图将新插入的行的 ItemID 列的值传递给存储过程 CalculateCurrentStock

ALTER TRIGGER UpdateCurrentStock
   ON StockIn
   AFTER INSERT
AS 
BEGIN
    SET NOCOUNT ON;
    EXEC CalculateCurrentStock (SELECT ItemID From INSERTED)
END

错误文本如下

Procedure or function 'CalculateCurrentStock' expects parameter '@ItemID', which was not supplied. The statement has been terminated.

感谢您的帮助。

编辑:答案

我已按照 Derek Kromm 和 KM 的建议更改了触发器

ALTER TRIGGER UpdateCurrentStock
   ON StockIn
   AFTER INSERT
AS 
BEGIN
    SET NOCOUNT ON;

    DECLARE @CSV varchar(max)
    SELECT @CSV=ISNULL(@CSV+',','')+ItemID From INSERTED
    EXEC CalculateCurrentStock @CSV


END

感谢您的帮助:)

最佳答案

编辑: 正如 Martin 指出的,如果您使用的是 SQL Server 2008,则可以传递表值参数。如果您使用的是 2005 或更早版本,则不能这样做。 KM 建议在这种情况下使用逗号分隔的值,我个人不同意。

实际上,您可能应该将存储过程逻辑直接复制到触发器中,从而完全避免整个困惑。

关于sql-server - SQL触发器执行问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7174865/

相关文章:

mysql - 尽管使用 MySQL,但数据库 'master' 错误中的 CREATE DATABASE 权限被拒绝

sql-server - 查询以在 ReportServer 实例上的*所有* SSRS 报告中查找*所有* SSRS 数据集列表

sql-server - 将包从 2008 升级到 2012 后出现 SSIS 脚本任务错误

也许是 SQL Server PIVOT?

SQL Server 2005 : str(4. 65,5,1) = 4.7,str(3.65,5,1) = 3.6?

t-sql - 将查询导出到文本文件

sql-server-2005 - 在SQL Server中,如何对实例中的所有数据库执行一段tsql?

sql - 从 SQL Server 自动提取日期 - T-SQL

sql-server - 为什么 t-sql 允许我违反使用 UDP 的检查约束?

sql-server-2005 - 在数据类型为 datetime 的 SQL 数据库中存储不带时间的日期