SQL Server +变量查找中的变量表名称

时间:2017-07-14 06:29:49

标签: sql-server variables

我有一个查询,其中我希望将表名[TableX]设为变量。

此查询需要使用不同的变量多次执行。所以我想知道是否可以创建一个(临时)表,在其中可以查找这些变量的值?

e.g。

list    language    Table
----------------------------
51      152         TableX
52      154         TableY
53      156         TableZ

代码:

declare @list int='51'       -- change
declare @language int='152'    -- change

insert into [DB].[Table] ([list], [value2], [language])
    Select 
        @list, value2, @language
    From
        [DB2].[TableX] -- change table name

谢谢

2 个答案:

答案 0 :(得分:0)

如果您还没有准备好更改数据模型,但您的表(TableA,...,TableZ)是相同的,您可以使用这样的VIEW:

CREATE VIEW MyTables
AS
    SELECT [value1], [value2], [value3], [value4], 'TableA' AS TableName
    FROM [DB2].[TableA]

    UNION ALL

    /*
    .
    .
    .
    .
    .
    */

    SELECT [value1], [value2], [value3], [value4], 'TableY'
    FROM [DB2].[TableY]

    UNION ALL

    SELECT [value1], [value2], [value3], [value4], 'TableZ'
    FROM [DB2].[TableZ]
GO

然后使用:

declare @list int= 51        -- change
declare @language int = 152    -- change

insert into [DB].[Table]
      ([list]
      ,[value2]
      ,[language])

Select 
      @list,
      value2,
      @language
FROM MyTables m
    JOIN [SomeTable] s ON s.[Table] = m.TableName
WHERE s.list = @list 
    AND s.language = @language 

答案 1 :(得分:0)

您必须使用动态SQL来执行此操作:

$str='localhost/used_cars/search/mk_honda/md_city/mk_toyota';
$str=explode('/',$str);
$final=[];
foreach ($str as $words){
(!empty(explode('_',$words)))?(isset(explode('_',$words)[1]))?$final[]=explode('_',$words)[1]:false:false;
}
$final=implode(',',$final);
echo $final;

当然这是一个简单的例子,我强烈建议您参数化它并使用executeSQL而不是exec。