您需要使用存储在表中的条件构建组成固定部分的最终查询。您的代码中的问题是它只是从表中选择,而不是组成任何语句。完全有可能做你想做的事(即使它被广泛认为是一种不好的做法)。您需要分两步完成,首先检索条件,然后将其合并到最终查询中:
DECLARE @sqlCommand NVARCHAR(MAX) ;
DECLARE @cond NVARCHAR(MAX) ;
DECLARE @Id INT = 1 ; --Replace with the actual ID you want
--Get the condition string from table
SELECT @cond = Condition FROM Answer_CFG WHERE answer_ID=@Id ;
--Build the final query by concatenating the initial, fixed part with the condition extracted
SET @SqlCommand = 'SELECT Answer_ID FROM Answer_CFG as ans1 WHERE ans1.Quest_ID=@QuestionID AND ' + @cond ;
EXEC sp_executesql @sqlCommand,'@QuestionID INT', @QuestionID ;
编辑
似乎还有一个额外的问题,它要求每一行获得不同的条件,所以我写的方法并不那么容易。问题是我们不能使用完全相同的查询,但每一行都需要一个不同的查询。这是最终应该执行的代码:
SELECT Answer_ID FROM Answer_CFG as ans1 WHERE ans1.Quest_ID=@QuestionID AND 1=1;
SELECT Answer_ID FROM Answer_CFG as ans1 WHERE ans1.Quest_ID=@QuestionID AND answ_id=38;
SELECT Answer_ID FROM Answer_CFG as ans1 WHERE ans1.Quest_ID=@QuestionID AND something>otherthing;
最后的条件总是不同的。假设这没问题并且我已经很好地解决了这个问题,试试这个:
DECLARE @SqlCommand NVARCHAR(MAX) = '' ;
--Compose a SQL query for each row
SELECT @SqlCommand = @SqlCommand + 'SELECT Answer_ID FROM Answer_CFG as ans1 WHERE ans1.Quest_ID=@QuestionID AND ' + Condition + ';' + CHAR(13) + CHAR(10)FROM Answer_CFG ;
--See what actually gets executed
PRINT @sqlcommand ;
--Execute the multitude of SELECTs all at once
EXEC sp_executesql @sqlCommand,N'@QuestionID INT', @QuestionID ;
这样做的问题是它为表中的每一行发出一个查询,导致每行查询一个结果集。这很容易通过在它生成的查询字符串中添加 UNION ALL 来解决,具体取决于您的需要。