在INSERT INTO语句中使用子查询作为表名

3

我遇到了一个动态创建表格的情况。我想知道是否有一种方法可以将子查询的结果作为INSERT INTO语句中的表格。

我目前使用动态SQL和表名来解决这个问题,但对于更复杂的插入操作,这可能会变得非常混乱。

以下是我的意思的示例:

INSERT INTO (SELECT name 
             FROM sys.objects 
             WHERE object_id = 914102297)

5
不行。如果你动态创建表并往其中插入数据,那么动态 SQL 是唯一的方法。但是你可以使用 OBJECT_NAME(914102297) - Martin Smith
@Martin 我得到了 Invalid object name 'OBJECT_NAME' 这个错误信息,你能给我一个例子吗? - Jack
@Jack - 我的意思是,不要从 sys.objects 中选择名称,但我再看了一遍,发现你已经有名称了,所以忽略那一部分!除了动态 SQL 或不动态创建表之外,没有其他解决方案。 - Martin Smith
8
我担心你正在动态创建表,这通常意味着存在设计问题。 - HLGEM
@HLGEM,感谢您的建议。 - Jack
1个回答

1
你可以像这样做:

DECLARE @Query nvarchar(4000)
set @Query = 'INSERT INTO ' + (SELECT name FROM sys.objects WHERE object_id = 914102297) set @Query = @Query + ... exec sp_executesql @query

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接