我想从查询中获取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
)。试试这个 :
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
问题内容: 在SQL Server 2014中,我试图创建一个动态的WHERE子句。 我已将查询构建为字符串,但是当我尝试使用sp_executesql执行查询时,出现以下错误:提示 13您必须声明标量变量“ @desde”。 我不知道如何使sp_executesql识别输入参数。 问题答案: 代替 使用 您必须定义在动态查询中使用的参数,例如 请参考sp_executesql 否则,您可以将动态
问题内容: 我使用dapper-dot-net作为ORM,它会产生以下缓慢执行(1700毫秒)的SQL代码。 当我通过删除参数来修改此代码时,查询将以极快的速度(20毫秒)执行。缺少这些参数是否应该造成很大的不同,为什么? 问题答案: 在末尾添加OPTION(RECOMPILE) 我怀疑您正在经历“参数嗅探” 如果是这种情况,我们可以将其留给OPTION或考虑替代方案 更新1 以下文章将向您介绍“
我正在学习如何使用Mybatis。老实说,我很喜欢这个框架。它很容易使用,我对它很满意,因为我可以使用它的sql命令:)我使用MyBatis 3.4.2和PostgreSQL数据库。 例如,我喜欢在插入之前使用注释执行查询是多么容易。如果我在接口方法之前添加一些注释,那么数据映射就像一个迷人的例子,比如:。 我不喜欢的(我希望你能把我引向正确的方向)有以下几点: 使用JDBC时,我需要做到以下几点
我的理解是,当编写gcc样式的内联asm时,您必须非常具体和准确地了解所有的输入和输出参数(和clobbers),这样编译器就会确切地知道如何为代码分配寄存器,以及它可以对那些寄存器的值和asm代码可能读取和/或修改的任何内存假设什么。编译器使用这些信息尽可能地优化周围的代码(如果它认为内联asm对任何东西都没有影响,甚至完全删除它)。对此不够具体可能会导致不正确的行为,因为编译器是根据您的不正确
return语句可用于仅从函数返回一个值。 但是,使用output parameters ,您可以从函数返回两个值。 输出参数与参考参数类似,不同之处在于它们将数据传输出方法而不是传输到方法中。 以下示例说明了这一点 - using System; namespace CalculatorApplication { class NumberManipulator { public
问题内容: 我有一个查询,在SQL Server Management STudio中超快,在sp_ExecuteSQL下运行时超慢。 这与在spExecuteSQL下运行时不缓存执行计划有关吗? 问题答案: 不。 您可以看到两个执行计划,并使用以下查询对其进行比较。 该版本将有一个“准备好的”