sql - 声明要在不同的“From”语句中使用的表名
问题描述
我不想从一组表对中创建两个不同的临时表,这些表对在至少两个不同的数据库中具有相同的表名。总而言之,我有 4 个不同的表对,这就是我尝试为它声明一个变量的原因,所以我只需要在程序顶部更改表名。
当我尝试在“From”语句中声明要使用的变量时,但无法使代码正常工作。我已经阅读了一些关于动态编程的内容,但并不真正了解如何在这种情况下使用它。
DECLARE @table char(20);
SET @table = 'Table_1';
SELECT a.*
into #temp1
FROM [DB_1].[Schema].@table a
select a.*
into #temp2
FROM [DB_2].[Schema].@table a
提前致谢,
干杯
解决方案
我刚刚使用 Adventure works 示例数据库作为示例数据库,请使用此 sql 脚本它将满足您的预期结果
IF OBJECT_ID('tempdb..#TableList')IS NOT NULL
DROP TABLE #TableList
CREATE TABLE #TableList(
Id INT IDENTITY,
TABLE_NAME VARCHAR(100),
TABLE_CATALOG VARCHAR(100),
TABLE_SCHEMA VARCHAR(100),
TempTableNAme VARCHAR(100)
)
INSERT INTO #TableList
(TABLE_NAME,
TABLE_CATALOG,
TABLE_SCHEMA,
TempTableNAme
)
SELECT TABLE_NAME ,
TABLE_CATALOG ,
TABLE_SCHEMA,
'#Temp'+CAST(ROW_NUMBER()OVER(ORDER BY TABLE_NAME) AS VARCHAR(10)) AS TempTableNAme
FROM INFORMATION_SCHEMA.TABLES
ORDER BY 1
DECLARE @MaxID INT,
@MinID INT,
@Sql nvarchar(max),
@GetTABLE_NAME VARCHAR(100),
@GetTABLE_CATALOG VARCHAR(100),
@GetTABLE_SCHEMA VARCHAR(100),
@GetTempTableNAme VARCHAR(100)
SELECT @MaxID=Max(Id),@MinID=Min(Id)
FROM #TableList
WHILE @MinID<=@MaxID
BEGIN
SELECT @GetTABLE_NAME= TABLE_NAME ,
@GetTABLE_CATALOG =TABLE_CATALOG,
@GetTABLE_SCHEMA=TABLE_SCHEMA,
@GetTempTableNAme=TempTableNAme
FROM #TableList WHERE Id = @MinID
SET @Sql='SELECT * INTO '+@GetTempTableNAme+'_'+@GetTABLE_NAME+' FROM '+ QUOTENAME(@GetTABLE_CATALOG) +'.'+ QUOTENAME(@GetTABLE_SCHEMA)+'.'+ QUOTENAME(@GetTABLE_NAME)
--EXEC (@Sql)
PRINT @Sql
SET @MinID=@MinID+1
END
推荐阅读
- r - 如何为另一个变量的唯一值创建索引变量?
- c# - 为 MTOM 消息 MIME 部分创建阅读器时出错,找不到 Content-ID '<858d8f9f-b101-46c3-bf84-d2b934ad1271>'
- tensorflow - 糟糕的文本生成结果,而很好的预测结果
- arrays - 如何将序列转换为数组?
- rxjs - 如何基于一个外部 observable 将多个 observable 组合在一起?
- jupyter-notebook - 如何检测是在 Jupyter Notebook 还是 Lab
- python - 在多列上合并两个熊猫数据框
- java - 在方法中将多个字符串作为参数时如何选择字符串极端情况?
- javascript - 有没有办法在我的 c# 程序中捕获 cefsharp 中的 javascript 引发的错误?
- swift - 为枚举创建实例后,如何为枚举创建带有打印功能的 switch 语句?