小编典典

SP_EXECUTESQL和输出参数

sql

我想从查询中获取ID,但是我得到的是NULL,我的错误在哪里?

DECLARE @TblZimz    NVARCHAR(256)
DECLARE @IdModul    INTEGER
DECLARE @Id         INTEGER

SET @TblZimz        = '_ZIMZ000001'
SET @IdModul        = 1
--SET @Id               = -1

EXECUTE [InsertZimz] @TblZimz, @IdModul, @Id OUTPUT




ALTER PROCEDURE [InsertZimz]
@TblZimz    NVARCHAR(256)
, @IdModul  NVARCHAR(256)
, @Id       INTEGER OUTPUT

            DECLARE @SqlQuery NVARCHAR(MAX)
        SET @SqlQuery = 'SELECT TOP (1) ([ID]) FROM ' + @TblZimz + ' WHERE [ModulId] = ' + @IdModul

        EXEC SP_EXECUTESQL @SqlQuery, N'@Id INTEGER OUTPUT', @Id OUTPUT

为什么@Id参数始终为null?我看不到我的错误?


阅读 249

收藏
2021-03-23

共1个答案

小编典典

首先,选择所希望的id使用的输出变量@Id = ([ID])然后分配该@Id OUTPUT中值@Id使用可变@Id = @Id OUTPUT。另外,您应该使用变量在where子句中传递数据,以避免类似sql的注入问题[ModulId] = @IdModul(即,您不应像那样将其串联起来[ModulId] = ' + @IdModul)。试试这个 :

DECLARE @SqlQuery NVARCHAR(MAX)

SET @SqlQuery = 'SELECT TOP (1) @Id = ([ID]) FROM '
                + @TblZimz + ' WHERE [ModulId] = @IdModul'

EXEC SP_EXECUTESQL
  @SqlQuery,
  N'@Id INT OUTPUT, @IdModul INT',
  @IdModul = @IdModul,
  @Id = @Id OUTPUT

这里查看详细信息SP_EXECUTESQL

2021-03-23