Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server中的变量表名称+;变量查找_Sql Server_Variables - Fatal编程技术网

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

Sql server SQL Server中的变量表名称+;变量查找,sql-server,variables,Sql Server,Variables,我有一个查询,我想将表名[TableX]作为一个变量 此查询需要使用不同的变量执行多次。所以我想知道是否有可能创建一个(temp)表来查找这些变量的值 e、 g 代码: 谢谢如果您还没有准备好更改数据模型,但是您的表(TableA,…,TableZ)是相同的,您可以使用如下视图: CREATE VIEW MyTables AS SELECT [value1], [value2], [value3], [value4], 'TableA' AS TableName FROM [DB

我有一个查询,我想将表名
[TableX]
作为一个变量

此查询需要使用不同的变量执行多次。所以我想知道是否有可能创建一个(temp)表来查找这些变量的值

e、 g

代码:


谢谢

如果您还没有准备好更改数据模型,但是您的表(TableA,…,TableZ)是相同的,您可以使用如下视图:

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 

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

declare @list int='51'       -- change
declare @language int='152'    -- change
DECLARE @TableX varchar(100) = 'TableX'
DECLARE @SQL varchar(500)

SET @SQL = 'insert into [DB].[Table] ([list], [value2], [language])
Select ' + CAST(@list as varchar(5)) + ' , value2, ' + CAST(@language as varchar(5)) + '
From
    [DB2].[' + @TableX + '] '

exec @SQL

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

这通常是数据模型损坏的迹象-您以不适当的方式将数据和元数据混合在一起。它通常还表示属性拆分,即数据根据隐含属性进入多个表中的一个,而不是将属性精确建模为列的单个表。(例如,典型的坏例子是有
男性员工
女性员工
表,而不是一个
员工
表,其中
性别
列包含在内)实际查询并不是这么简单,我也不是架构师——只是在寻找一种更有效的插入数据的方法。ThanksTry使用select…into#[temp table],@ELLER无法在标准SQL语句中参数化表(或列)名称。如果您真的必须使用动态SQL,那么您必须使用动态SQL—尽管它有很多缺点和缺点。。。。
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 
declare @list int='51'       -- change
declare @language int='152'    -- change
DECLARE @TableX varchar(100) = 'TableX'
DECLARE @SQL varchar(500)

SET @SQL = 'insert into [DB].[Table] ([list], [value2], [language])
Select ' + CAST(@list as varchar(5)) + ' , value2, ' + CAST(@language as varchar(5)) + '
From
    [DB2].[' + @TableX + '] '

exec @SQL