gpt4 book ai didi

sql - SP_EXECUTESQL 和输出参数

转载 作者:行者123 更新时间:2023-12-03 01:36:23 25 4
gpt4 key购买 nike

我想从查询中获取 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参数总是为空?我看不到我的错误?

最佳答案

首先,使用 @Id = ([ID]) 在输出变量中选择所需的 id,然后分配此 @Id OUTPUT 值在 @Id 变量中使用 @Id = @Id OUTPUT。另外,您应该使用变量在 where 子句中传递数据,以避免 sql 注入(inject)问题,例如 [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的详细信息here

关于sql - SP_EXECUTESQL 和输出参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27486030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com