SQL Server EXEC输出始终为空
我使用的是EXEC语句,输出总是空的。这对我来说是个问题。我需要某种方法来确定INSERT语句是否成功。或者,我可以删除查询的@bogusTable和INSERT部分,只测试底层SELECT语句是否收集了任何结果,但在该输出上我总是得到NULL 以下是查询:SQL Server EXEC输出始终为空,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我使用的是EXEC语句,输出总是空的。这对我来说是个问题。我需要某种方法来确定INSERT语句是否成功。或者,我可以删除查询的@bogusTable和INSERT部分,只测试底层SELECT语句是否收集了任何结果,但在该输出上我总是得到NULL 以下是查询: SET @mainQuery = ' DECLARE @bogusTable TABLE( someField VARCHAR(MAX) 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
您没有在动态sql中设置
@tempParam
,因此它当然是空的。您可以将其设置为@@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
正确地引入了参数。@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
这不是向执行的sql中添加
@randINT
的方式。在哪里设置@tempParam
的值?我看到了声明和输出的期望值,但是在执行的脚本中,它在哪里为@tempParam
赋值?如果您打算使用带有参数的sp_executesql
,为什么您仍在进行原始字符串连接以将@randInt
的值注入其中?如果您在所有内容之上添加声明@tempParam INT
,它每次仍然输出NULL。另外,我有理由需要将@mainQuery
注入@randInt
,这超出了这个问题的范围。为什么首先要在这里使用动态sql?从发布的内容来看,根本不需要动态sql。@SeanLange请参见上面的注释。