我希望能够获得存储在一列中的查询结果,该查询由另一列中的值参数化。模型更具关系性(查询位于1–n链接表中),但保持简单:
3.4.0
我希望能够获得查询结果,所以类似
value | query
-------------
25 | SELECT id, name FROM courses
12 | SELECT id, name FROM countries
我希望没有应用程序侧就可以这样做。
有可能吗?
PS:SQL注入的风险并未发挥作用,它已经得到管理。
答案 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;
如果要将所有语句的结果检索到单个结果集中,并且列id
和name
具有兼容的数据类型,则可以执行下一条语句(可能使用{{1} }通话):
CONVERT