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