从数据库字段中获取表名

时间:2017-09-05 20:22:20

标签: sql sql-server

我使用的是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")

2 个答案:

答案 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。在你的环境中拍摄一下,看看它是怎么回事。