EXEC查询存储在列中

时间:2019-06-06 10:49:01

标签: sql-server dynamic-sql

我希望能够获得存储在一列中的查询结果,该查询由另一列中的值参数化。模型更具关系性(查询位于1–n链接表中),但保持简单:

3.4.0

我希望能够获得查询结果,所以类似

value | query
------------- 
25    | SELECT id, name FROM courses
12    | SELECT id, name FROM countries

我希望没有应用程序侧就可以这样做。

有可能吗?

PS:SQL注入的风险并未发挥作用,它已经得到管理。

1 个答案:

答案 0 :(得分:2)

一种可行的方法是为所有可能的SELECT语句生成并执行动态语句。

表格:

CREATE TABLE #Statements (
    [value] int,
    [query] nvarchar(max)
)
INSERT INTO #Statements 
   ([value], [query])
VALUES
    (25, N'SELECT id, name FROM courses'),
    (12, N'SELECT id, name FROM countries')

T-SQL:

DECLARE @stm nvarchar(max) = N''
SELECT @stm = (
   SELECT 
      CONCAT(
         [query],
         N' WHERE id = ',
         [value],
         N'; '
      )
   FROM #Statements
   FOR XML PATH('')
   )
PRINT @stm
EXEC sp_executesql @stm

生成的语句

SELECT id, name FROM courses WHERE id = 25; 
SELECT id, name FROM countries WHERE id = 12; 

如果要将所有语句的结果检索到单个结果集中,并且列idname具有兼容的数据类型,则可以执行下一条语句(可能使用{{1} }通话):

CONVERT