如何在查询结果中获取SQL?

时间:2018-03-26 06:57:01

标签: sql-server tsql

现在,有一个表[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"
  1. 如何编写这样的T-SQL?

  2. 是否可以将字符串作为SQL的一部分?

2 个答案:

答案 0 :(得分:0)

答案 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);