在SQL中动态设置表名

问题描述 投票:0回答:1

有没有办法在SQL中动态设置表名?

DROP TABLE IF EXISTS #temptable
CREATE TABLE #temptable ([Rownum] INT IDENTITY(1, 1), [DatabaseName] INT, [CustomerName] NVARCHAR(50) )

INSERT INTO #temptable ([DatabaseName], [CustomerName])
VALUES
( 361, 'Adam' ),
( 362, 'Bella' ),
( 363, 'Charlie' )

所以输出是

SELECT * FROM C361.dbo.CustomerInfo WHERE CustomerName = 'Adam'
SELECT * FROM C362.dbo.CustomerInfo WHERE CustomerName = 'Bella'
SELECT * FROM C363.dbo.CustomerInfo WHERE CustomerName = 'Charlie'
sql sql-server
1个回答
0
投票

您可以使用

STRING_AGG
创建动态 SQL 字符串。

DECLARE @sql nvarchar(max);

SELECT @sql =
  STRING_AGG(CONVERT(nvarchar(max), CONCAT('
SELECT *
FROM ', QUOTENAME(CONCAT('C', tt.DatabaseName)), '.dbo.CustomerInfo
WHERE CustomerName = ', QUOTENAME(tt.CustomerName, '''')
  )), '')
FROM #temptable tt;

PRINT @sql;   -- your friend

EXEC sp_executesql @sql;

请注意使用

QUOTENAME
来正确转义名称和值。

© www.soinside.com 2019 - 2024. All rights reserved.