【发布时间】:2020-04-22 18:33:34
【问题描述】:
我有一个关于我的 SQL CTE 构造的问题。我正在使用 Azure 数据工厂和数据库中的存储过程。我想做的是:
- 以 JSON 格式将我的数据从我的视图返回到 Azure 数据工厂。
- 根据我的视图中的我的 ObjectCode 以 JSON 格式返回在 WHERE 子句中动态过滤的数据。 -> 为了测试第 2 步,我尝试使用静态声明的 ObjectCode
但是单引号在 WHERE 子句中不起作用。我用 REPLACE、CHAR(39) 和双引号尝试了一些东西。就像他们说的here、here和here
第 1 步我已成功完成以下代码:
BEGIN
DECLARE @TABLE TABLE(RESULT NVARCHAR(MAX))
DECLARE @QUERY NVARCHAR(MAX) = '
;WITH x(Params) as
(
SELECT * FROM [Schema].[View] FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
)
Select * from x
'
Insert @TABLE
EXEC (@QUERY)
Select ',"pipelineParameters": ' + LEFT(RESULT,LEN(RESULT)-1) + '}' as Params from @TABLE;
END
上面的这个查询给了我正确的结果。但是,现在我需要对 Step 2 进行更改。我需要在查询中使用 WHERE 子句进行过滤。
所以,我尝试了:
DECLARE @TABLE TABLE(RESULT NVARCHAR(MAX))
DECLARE @ObjectCode NVARCHAR(MAX) = 'Objectname'
DECLARE @QUERY NVARCHAR(MAX) = '
;WITH x(Params) as
(
SELECT * FROM [Schema].[View]
WHERE Objectcode = REPLACE(@ObjectCode, '''', '')
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
)
Select * from x
'
Insert @TABLE
EXEC (@QUERY)
Select ',"pipelineParameters": ' + LEFT(RESULT,LEN(RESULT)-1) + '}' as Params from @TABLE;
但是当我运行这些查询时,我得到了这个错误:
有谁知道我可以在这里改进什么以便让它发挥作用?
【问题讨论】:
-
将参数传递给动态 SQL 使用 sp_executesql docs.microsoft.com/en-us/sql/relational-databases/…
-
你想完成什么?样本数据和期望的结果会有所帮助。
标签: sql sql-server common-table-expression declare