sql-server - EXECUTE sp_executesql 在 SQL Server 中不起作用
问题描述
我正在尝试实现一种基于动态定义的算法执行计算的机制。我这样做的方式是:
- 构建一个包含所有变量定义及其值的字符串,
- 获取(从表中)计算公式,
- 调用
sp_executesql
.
这是作为计算传递的字符串的内容(变量的内容@_l_Execute_Formula
):
DECLARE @_1 FLOAT = 678;
DECLARE @_2 FLOAT = NULL;
DECLARE @_3 FLOAT = NULL;
SET @_l_Result = @_1 + @_2 + @_3
调用是:
EXECUTE sp_executesql @_l_Execute_Formula ,
N'@_l_Result FLOAT OUTPUT' ,
@_l_Result = @_l_Result OUTPUT ;
我没有收到错误消息,@_l_Result
但NULL
.
我究竟做错了什么?
解决方案
NULL
带有return的浮点值的总和NULL
。您可能想要转义NULL
值。
DECLARE @_l_Execute_Formula NVARCHAR(MAX) = '
DECLARE @_1 FLOAT = 678;
DECLARE @_2 FLOAT = NULL;
DECLARE @_3 FLOAT = NULL;
SET @_l_Result = ISNULL(@_1, 0) + ISNULL(@_2, 0) + ISNULL(@_3, 0)'
DECLARE @_l_Result FLOAT
EXECUTE sp_executesql @_l_Execute_Formula ,
N'@_l_Result FLOAT OUTPUT' ,
@_l_Result = @_l_Result OUTPUT;
SELECT @_l_Result -- Result 678
推荐阅读
- c++ - C++ 删除未使用的类属性导致 std::logic_error
- r - adabag 和 rpart 的区别
- android - 视频聊天服务器(通过手动代码) - Android
- node.js - sequlize js/express js/node js如何更改日期格式
- c# - Azure eventthub 捕获回放
- reactjs - 将道具传递给无状态组件样式(css)
- java - 类在 CompletableFuture 中未正确加载
- java - 解析格式化的日期在 Java 11 中给出 null 但在 Java 8 中给出正确的输出
- ios - 我在从 google api 查找路由时遇到问题,它显示,此 IP、站点或移动应用程序无权使用此 API 密钥
- stripe-payments - Stripe 增加了不可发货产品的运费