我正在使用EXEC语句,OUTPUT始终为NULL。这对我来说是一个问题。我需要一些方法来识别INSERT语句是否成功。或者,我可以删除查询的@bogusTable和INSERT部分,只测试底层SELECT语句是否收集了任何结果,但我也总是在该OUTPUT上获得NULL。
以下是查询:
SET @mainQuery = '
DECLARE @bogusTable TABLE(
someField VARCHAR(MAX) NULL
);
INSERT INTO @bogusTable SELECT someField FROM someTable WHERE anINT = ' @randINT
EXEC sp_executesql @mainQuery, N'@tempParam INT OUTPUT', @tempParam=@someInt OUTPUT
IF (@someInt IS NULL)
BEGIN
--This always executes even when the INSERT statement in @mainQuery doesn't insert anything
END
答案 0 :(得分:0)
您没有在动态sql中设置@tempParam
,所以当然它是null。您可以将其设置为@@rowcount
以查看是否插入了任何行。
试试这个:
declare @randINT int;
--set @randINT here!
declare @mainQuery nvarchar(max);
declare @someInt int;
SET @mainQuery = '
DECLARE @bogusTable TABLE(
someField VARCHAR(MAX) NULL
);
INSERT INTO @bogusTable SELECT someField FROM someTable WHERE anINT = @randINT;
select @tempParam = @@rowcount;'
EXEC sp_executesql @mainQuery, N'@randINT int, @tempParam INT OUTPUT', @randINT=@randINT, @tempParam=@someInt OUTPUT
IF (@someInt > 0)
BEGIN
--This will only execute if something was inserted
select @someInt as row_count;
END
注意,我还正确地将@randINT
带入了参数。
答案 1 :(得分:0)
@BeanFrog非常接近。
这就是我需要的:
SET @mainQuery = '
DECLARE @bogusTable TABLE(
someField VARCHAR(MAX) NULL
);
INSERT INTO @bogusTable SELECT someField FROM someTable WHERE anINT = ' + @randINT + ';
SET @tempParam = @@ROWCOUNT;'
EXEC sp_executesql @mainQuery, N'@tempParam INT OUTPUT', @tempParam=@someInt OUTPUT
IF (@someInt = 0)
BEGIN
--This executes correctly now
END