2017-02-19 90 views
0

我使用动态SQL,查询数据库:查询数据库,利用以前的查询结果,并结合他们

DECLARE @VALUE VARCHAR(5000); 
    SET @VALUE = '123' 
    DECLARE @SQL5 NVARCHAR(MAX) = 'Select distinct item_id, attr_val from [dbo].[CONTRACT_ATTR] WHERE [ATTR_VAL] LIKE ''%@VALUE%'' AND [FIELD_ID] = 413 ORDER BY [attr_val]'; 
    SET @SQL5 = replace(@SQL5, '@VALUE', @VALUE); 
    EXEC SP_executesql @SQL5; 

这些结果如下:

enter image description here

我想取结果(item_id)并运行另一个select查询。事情是这样的:

UNION 
Select Column3 From @SQL5 where other_column = 1234 

结果将是3列返回的每个行中,2块原装和新的第二选择中。

我在做什么错,我该如何解决?

+0

如果你知道这个值,你为什么要使用REPLACE? – McNets

+0

@McNets我不以上述123为例。 –

+0

'联合'要求两个select语句返回相同的列(输出的模式必须相同) – Sparrow

回答

1

这里是没有动态SQL回答:

DECLARE @VALUE VARCHAR(100) 

SET @VALUE = '123' 

SELECT myuser.item_id, 
     myuser.attr_val, 
     parent.attr_val 
FROM [dbo].[CONTRACT_ATTR] AS myuser 
JOIN [dbo].[CONTRACT_ATTR] AS parent 
    ON parent.item_id = myuser.item_id 
    AND myuser.item_id = parent.item_id 
WHERE myuser.field_id = 239 
and parent.[ATTR_VAL] LIKE '%' + @VALUE + '%' 

我也动了加盟条件完全进入on条款。

0

我懂了:

SELECT myuser.item_id, 
     myuser.attr_val, 
     parent.attr_val 
FROM [dbo].[CONTRACT_ATTR] AS myuser 
JOIN [dbo].[CONTRACT_ATTR] AS parent 
    ON parent.item_id = myuser.item_id 
WHERE myuser.item_id = parent.item_id and myuser.field_id = 239 and parent.[ATTR_VAL] LIKE '%123%' 

整合动态SQL:

DECLARE @SQL5 NVARCHAR(MAX) = 'SELECT myuser.item_id, myuser.attr_val, parent.attr_val FROM [dbo].[CONTRACT_ATTR] AS myuser JOIN [dbo].[CONTRACT_ATTR] AS parent ON parent.item_id = myuser.item_id WHERE myuser.item_id = parent.item_id and myuser.field_id = 239 and parent.[ATTR_VAL] LIKE ''%@VALUE%'''; 
    SET @SQL5 = replace(@SQL5, '@VALUE', @VALUE); 
    EXEC SP_executesql @SQL5; 
+0

这里动态SQL的要点是什么?你可以直接使用一个变量。 –