sql-server - 带有字符串的动态 SQL,包括 SQL Server 中的变量声明
问题描述
是否可以运行包含变量声明的动态 SQL 脚本?
例子:
重要说明:这个例子只是为了演示我需要实现的机制。为了简单起见,所示的计算是微不足道的。
我需要返回 4 个传递值之间的最小值,因此,我以编程方式创建了一个包含以下代码的字符串:
DECLARE @_1 INT = 12 ;
DECLARE @_2 INT = 22 ;
DECLARE @_3 INT = 32 ;
DECLARE @_4 INT = 42 ;
DECLARE @_Min = NULL ;
SET @_Min = @_1 ;
IF (@_2 < @_Min) SET @_Min = @_2 ;
IF (@_3 < @_Min) SET @_Min = @_3 ;
IF (@_4 < @_Min) SET @_Min = @_4 ;
SELECT @_Min ;
同样,所有这些都包含在一个字符串变量中(比如@_Command
)。
要执行此操作并获得计算结果,我将运行以下命令:
EXECUTE sp_executesql @_l_Command ,
N'@_l_Result FLOAT OUTPUT' ,
@_l_Result = @_l_Result OUTPUT ;
运行它时,我收到一条错误消息,说明:
消息 156,级别 15,状态 1,第 1 行关键字“DECLARE”附近的语法不正确。
显然我在做一些语法错误但无法弄清楚它可能是什么。
解决方案
是的,您可以在动态查询中声明变量。
请在查询中设置@_Min 变量类型
我运行您的查询没有错误
DECLARE @_l_Result NVARCHAR(MAX)
DECLARE @_l_Command NVARCHAR(MAX)='
DECLARE @_1 INT = 12 ;
DECLARE @_2 INT = 22 ;
DECLARE @_3 INT = 32 ;
DECLARE @_4 INT = 42 ;
DECLARE @_Min int = NULL ;
SET @_Min = @_1 ;
IF (@_2 < @_Min) SET @_Min = @_2 ;
IF (@_3 < @_Min) SET @_Min = @_3 ;
IF (@_4 < @_Min) SET @_Min = @_4 ;
SELECT @_Min as res ;'
EXECUTE sp_executesql @_l_Command ,
N'@_l_Result FLOAT OUTPUT' ,
@_l_Result = @_l_Result OUTPUT ;
或者
EXECUTE sp_executesql @_l_Command
推荐阅读
- python - 使用 tkinter 鼠标事件
- python - python for循环if语句问题
- hadoop - hadoop mahout:运行 org.apache.classifier.df.mapreduce.TestForest 错误
- excel - 尝试检索列标题时代码失败
- hyperledger-fabric - ENDORSEMENT_POLICY_FAILURE 遵循更新的 Build First Network 教程
- asynchronous - Promise.all 不会等到 .then()
- google-maps - 当我缩小时,svg 图标不会停留在折线上
- c# - 通过类在表单内共享数据
- javascript - 渲染模板时golang包含javascript文件
- r - 闪亮 - 无法显示条形图