我使用的是SQL Server Management Studio 17.0。我有一个表控制不同文件的单独表格,如:
filename | tablename
---------+----------
file1 | table1
file2 | table2
我需要select from tablename
,但不是硬编码。文件名来自网络,我可以先得到表名,比如
select tablename
from filetables
where filename = "file1"
并使用它来查看文件表:
select *
from (table1)
有没有办法在SQL中执行此操作?像
这样的东西Select *
from
(select tablename
from filetables
where filename = "file1")
答案 0 :(得分:3)
您无法从只能在运行时和/或某些参数中确定的表中进行选择。在这种情况下,您唯一的选择是使用动态SQL,但请确保不要让自己暴露于SQL注入攻击。
Here's a link关于如何安全地创建动态SQL。
答案 1 :(得分:-1)
DECLARE @v_sql NVARCHAR(MAX),
@v_table_name NVARCHAR(MAX),
@v_file_name NVARCHAR(MAX)
SELECT @v_file_name = 'file1' -- Populated from web proc
SELECT @v_table_name = tablename
FROM filetables
WHERE filename = REPLACE(@v_file_name, '''', '')
SELECT @v_sql =
'SELECT *
FROM ' + @v_table_name + '
WHERE filename = ''' + @v_file_name + ''''
SELECT @v_sql -- Debug code to show you the statement prior to running
EXEC sp_executesql @v_sql
您需要像其他用户一样使用动态SQL。在你的环境中拍摄一下,看看它是怎么回事。