我想从查询中获取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?我看不到我的错误?
首先,选择所希望的id使用的输出变量@Id = ([ID])然后分配该@Id OUTPUT中值@Id使用可变@Id = @Id OUTPUT。另外,您应该使用变量在where子句中传递数据,以避免类似sql的注入问题[ModulId] = @IdModul(即,您不应像那样将其串联起来[ModulId] = ' + @IdModul)。试试这个 :
id
@Id = ([ID])
@Id OUTPUT
@Id
@Id = @Id OUTPUT
[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
SP_EXECUTESQL