T-SQL where 子句与 nvarchar 由 openquery 中的 string_agg 组成

T-SQL Where clause with nvarchar composed by a string_agg in openquery

我正在创建一个存储过程,其中我有这个 openquery:

SELECT @MY_QUERY = 'SELECT * FROM OPENQUERY(HYPER_CONN, ''
    SELECT COALESCE(SUM(QUANT_RIGA),0) FROM DDT_CLI_RIGHE WHERE DOC_RIGA_ID = ''''' + @THE_DDT + ''''' '')'

在 where 子句中我设置了这个变量 @THEDDT:

DECLARE @THE_DDT nvarchar(MAX) = (SELECT STRING_AGG(DOC_RIGA_ID,',') FROM ...

例如@THEDDT = test1,test2,test3

我想在我的“where in”子句中设置这个变量。

所以在 openquery 中,我试图拥有这样的东西(但使用变量):

WHERE DOC_RIGA_ID IN ('test1','test2','test3') 

有办法吗?

这更像是在黑暗中刺探,因为我们没有所有信息,但是,正如我提到的,似乎您需要做的就是改变您的 DOC_RIGA_ID = {literal} 子句到 DOC_RIGA_ID IN ({delimited List}) 子句:

DECLARE @THE_DDT nvarchar(MAX) = (SELECT STRING_AGG(QUOTENAME(DOC_RIGA_ID,''''),',') --Assumes DOC_RIGA_ID can't have a value longer than 128 characters
                                  FROM ...

SELECT @MY_QUERY = 'SELECT * FROM OPENQUERY(HYPER_CONN, ''
    SELECT COALESCE(SUM(QUANT_RIGA),0) FROM DDT_CLI_RIGHE WHERE DOC_RIGA_ID IN (' + REPLACE(@THE_DDT,'''','''''') + ')'') OQ;';

当然,这是未经测试的,因为我无法测试此声明。