2012-08-07 44 views
1

我知道这并不理想,但我想知道是否有可能基于动态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的数量,因为表名是动态的,请让我知道。

+2

通常有助于解释“无法工作”的含义。你有错误吗?它以前如何? – 2012-08-07 13:49:13

+0

对不起。如果您复制了我的帖子末尾非常简单的代码段并执行它,您应该会看到“无效的对象名称”#MyTempTable'。“ – 2012-08-07 13:55:52

回答

2

假设#MyTempTable已经存在:

DECLARE @sql NVARCHAR(MAX); 
SET @sql = N'SELECT * FROM INFORMATION_SCHEMA.COLUMNS;'; 
INSERT #MyTempTable EXEC sp_executesql @SQLString; 

否则请说明你正在尝试做的。如果表格尚未创建,则可以执行动态SQL内的所有操作,例如:

DECLARE @sql NVARCHAR(MAX); 
SET @sql = N'SELECT * INTO #MyTempTable FROM INFORMATION_SCHEMA.COLUMNS; 
    SELECT * FROM #MyTempTable;'; 
EXEC sp_executesql @sql; 
+0

一旦我从上面的例子中将SQLString更改为@sql,我得到了我在上面的示例中发布的相同错误 - 无效的对象名称“#MyTempTable”。 – 2012-08-07 13:58:56

+0

我刚刚重读了关于#MyTempTable已存在的假设的文章。这很可能是我的问题。您是否知道我可以通过动态sql定义临时表的结构并填充它的方式。这很可能是我的问题的原因。我的印象与[本答案](http://stackoverflow.com/a/6100350/685760)类似,临时表的结构被定义为查询运行的结果。 – 2012-08-07 14:09:50

+0

再次澄清你实际尝试做什么可能会有所帮助。为什么这里需要#temp表格?它在填充之后还有什么用呢? – 2012-08-07 14:11:24