我有以下触发器。插入新行时,存储过程无法获取变量@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/