我想从查询中获取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 Paramter是alwasy null?我看不出我的错误?
答案 0 :(得分:10)
首先,使用id
在输出变量中选择所需的@Id = ([ID])
,然后使用@Id OUTPUT
在@Id
变量中分配此@Id = @Id OUTPUT
值。此外,您应该使用变量传递where子句中的数据以避免像[ModulId] = @IdModul
这样的SQL注入问题(即您不应该像[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
here
答案 1 :(得分:0)
就像Deepak的答案一样,但更简单:
EXEC SP_EXECUTESQL @SqlQuery,
N'@ Id INT输出,@ IdModul INT',
@IdModul输出,@ Id