我知道这并不理想,但我想知道是否可以基于动态 sql 填充临时表?
这个答案中显示了一个与我想要实现的非常相似的例子
SELECT into #T1 execute ('execute ' + @SQLString )
或者
INSERT into #T1 execute ('execute ' + @SQLString )
我也无法工作。从编辑看来,第一个选项是错误的,所以对于第二个选项,我尝试过类似的东西;
DECLARE @SQLString VARCHAR (2000) = 'SELECT * FROM INFORMATION_SCHEMA.COLUMNS'
INSERT into #MyTempTable execute (@SQLString )
任何想法都非常感谢。
编辑:
为了澄清我正在尝试做的事情而不会过于本地化,我将在下面尽可能简要地解释一下。
我在数据库的暂存区域中有数据,其中包含具有动态名称和动态列数的表。但是,每个表的一些列名是相同的。我不想在动态 sql 中构造所有内容,而是希望能够简单地将已知列提取到临时表(或表变量、CTE、派生表等)中并对其采取行动。
所以给了一张桌子;
CREATE TABLE SomeParticularNameThatCantBeKnownToAStoredProc (
[1] AS VARCHAR(100),
[2] AS VARCHAR(100),
... -- Could be any number of these columns
[Id] AS INT,
[KnownCol] AS VARCHAR(100),
[KnownCol2] AS VARCHAR(100),
....
[DboId] AS INT
)
我希望能够执行必要的操作以允许我处理这些数据,而不必在动态 sql 中完成所有操作。我希望能够做类似的事情;
DECLARE @TableName AS VARCHAR(1000) = 'SomeParticularNameThatCantBeKnownToAStoredProc'
SELECT [Id], [KnownCol], [KnownCol2], [DboId]
INTO #KnownName
FROM @TableName -- I know this isn't possible, but this is what I'd like to do
这将允许我针对一致的#KnownName 执行 SQL 语句。我需要做的其他一些操作非常冗长,例如使用数据与其他现有表相关联,将数据从暂存表复制到它们的 dbo 模式等效项,以及使用 MERGE 将 DboId 与暂存表 Id 匹配OUTPUT INTO如此处所述,依此类推。
如果您能想到任何其他方式,我可以限制我需要编写的动态 SQL 的数量,因为表名是动态的,那么请告诉我。