SQL Server EXEC输出始终为空

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

我使用的是EXEC语句,输出总是空的。这对我来说是个问题。我需要某种方法来确定INSERT语句是否成功。或者,我可以删除查询的@bogusTable和INSERT部分,只测试底层SELECT语句是否收集了任何结果,但在该输出上我总是得到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请参见上面的注释。