我正在使用SQL Sever 2008.我在数据库中存储了几个WHERE语句。我正在尝试使用表中的查询条件构建查询。
所以我想说我有一个名为'Categories'的表
+----------+------------------------+
| Seq | SQLWHERE
+----------+------------------------+
| 0 | ([ID] >= 60010
| 1 | And
| 2 | [ID] <= 60020)
| 3 | Or
| 4 | [ID] = 60025
| 5 | Or
| 6 | [ID] = 60035)
+----------+------------------------+
所以本质上我需要构建一个按照序列0-6的顺序使用上面的SQLWHERE行的查询。
所以我需要下面的效果,但这不起作用。
SELECT *
FROM AnotherTable
WHERE (SELECT SQLWHERE FROM Categories ORDER BY Seq)
因为我想要SQL查询来呈现
SELECT *
FROM AnotherTable
WHERE
([ID] >= 60010
And
[ID] <= 60020)
Or
[ID] = 60025
Or
[ID] = 60035)
答案 0 :(得分:0)
首先转换字符串Concatenate many rows into a single text string?
中的每一行并将其传递给sp_executesql
答案 1 :(得分:0)
您将不得不创建一个函数或存储过程来查询where项并动态构建SQL。然后使用附加的where子句执行SQL。这是一个存储的proc示例。改变&#34; AnotherTable&#34;到您的表名并将CategoryX更改为Category。
CREATE PROCEDURE ExecutDynamicWhere
AS
BEGIN
DECLARE @Where VARCHAR(8000)
DECLARE @sql VARCHAR(8000)
SELECT @Where = COALESCE(@Where + ' ', '') + SQLWhere From CategoryX
Set @sql = 'SELECT * FROM AnotherTable WHERE ' + @Where
EXECUTE sp_executesql @sql
END
GO