sql-server - 如何在 sp_executesql 中将表变量与 JSON 数据一起使用
问题描述
您好我正在尝试使用 sp_executesql
DECLARE @filterBusiness TABLE
(
[BusinessID] INT NULL
);
INSERT INTO @filterBusiness
(
[BusinessID]
)
SELECT
[BusinessID]
FROM OPENJSON(@jsonData)
WITH
(
[BusinessID] INT '$.BusinessID'
)AS [bus]
DECLARE @sqlQuery NVARCHAR(max) = ''
SELECT @sqlQuery =' SELECT * FROM [Training].[Training]
WHERE 1=1'
IF EXISTS (SELECT * FROM @filterBusiness)
BEGIN
SET @whereClause = CONCAT(@whereClause, 'AND [BusinessID] IN (SELECT [BusinessID] FROM @filterBusiness)');
END
EXEC sp_executesql @sqlQuery,
N'@filterBusiness TABLE READONLY', @filterBusiness`
解决方案
您必须定义用户定义的表类型,然后将其传递给 sp_executesql
CREATE TYPE BUSINESSTYPE AS TABLE
(
[BusinessID] INT NULL
);
DECLARE @whereClause VARCHAR(5000) = ''
DECLARE @filterBusiness BUSINESSTYPE
INSERT INTO @filterBusiness
(
[BusinessID]
)
SELECT
1
select * FROM @filterBusiness
DECLARE @sqlQuery NVARCHAR(max) = ''
SELECT @sqlQuery =' SELECT * FROM [Training].[Training]
WHERE 1=1'
IF EXISTS (SELECT * FROM @filterBusiness)
BEGIN
SET @whereClause = CONCAT(@whereClause, 'AND [BusinessID] IN (SELECT [BusinessID] FROM @filterBusiness)');
END
EXEC sp_executesql @sqlQuery,
N'@filterBusiness BUSINESSTYPE READONLY', @filterBusiness
推荐阅读
- documentation - 文档元掩码教程 - 第 2 部分在哪里
- ios - 如何将 SwiftUI 视图添加到现有的 pre-SwiftUI 项目中
- raster - 光栅计算器:IF (AB=A) THEN 分类
- javascript - 如何使用Javascript获取选项元素(从选择列表中选择)“值”属性的值
- python - 如何在单个 Python 应用程序中分离 Google Cloud Logging 中的日志?
- reactjs - Glob minimatch 模式在单个组中获取 React 和 Meteor 导入
- javascript - 赛普拉斯最佳实践 - 存储和比较两个值
- r - 如何在 R 中的 VAR 对象中存储 Newey West 标准错误?
- angular - 如何解决“null”类型的参数不可分配给“GoogleUser |”类型的参数 不明确的'
- python - Sympy - 使用求解函数后如何返回分数