现在,有一个表[A],其中列[A].[Sql](NVARCHAR)
存储了
表[B]条件如“1 = 1 AND Id ='XXX'AND Key ='YYYY'”
现在,我要做的是查询表[B]并使用[A] .sql值作为WHERE条件,如:
SELECT *
FROM [B]
WHERE "SELECT [A].sql From [A] WHERE [B].ConditionId = [A].Id"
如何编写这样的T-SQL?
是否可以将字符串作为SQL的一部分?
答案 0 :(得分:0)
您可以使用
1)sp_executesql函数
https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-executesql-transact-sql
或
2)执行功能 https://docs.microsoft.com/en-us/sql/t-sql/language-elements/execute-transact-sql
答案 1 :(得分:0)
您需要使用动态SQL。基本上,您使用所需的SQL生成varchar,然后使用EXEC
执行它,如下所示:
DECLARE @FilterCondition VARCHAR(MAX) =
(SELECT [A].sql From [A] WHERE [B].ConditionId = [A].Id)
DECLARE @DynamicSQL VARCHAR(MAX) = 'SELECT * FROM [B] WHERE ' + @FilterCondition
-- PRINT (@DynamicSQL)
EXEC (@DynamicSQL)
请注意,执行动态SQL非常危险,您需要在执行之前验证要执行的命令。对于一个灾难性的例子,如果@FilterCondition
有以下内容会发生什么?
1 = 0; DECLARE @DBName VARCHAR(30) = DB_NAME(); EXEC ('DROP DATABASE ' + @DBName);