我知道这并不理想,但我想知道是否有可能基于动态sql填充临时表?使用动态sql来填充临时表
一个非常相似的示例,我想要实现的是显示在this answer为任何
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)
任何想法,非常感谢。
编辑:
在试图澄清什么,我想不会太本地化做的,我解释的简单,因为我可以在下面。
我在我的数据库的临时区域中有数据,其中包含具有动态名称和动态列数的表。但是,每个表的一些列名称是相同的。我希望能够将已知列简单地提取到临时表(或表变量,CTE,派生表或其他)中,并根据此操作,而不是在动态SQL中构建所有内容。
所以给了一张表格,
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,如here所述,依此类推。
如果您可以考虑其他任何方式,我可以限制动态SQL的数量,因为表名是动态的,请让我知道。
通常有助于解释“无法工作”的含义。你有错误吗?它以前如何? – 2012-08-07 13:49:13
对不起。如果您复制了我的帖子末尾非常简单的代码段并执行它,您应该会看到“无效的对象名称”#MyTempTable'。“ – 2012-08-07 13:55:52