Sql server 仅通过Select语句在临时表中动态插入数据

Sql server 仅通过Select语句在临时表中动态插入数据,sql-server,dynamic,temp-tables,sp-executesql,Sql Server,Dynamic,Temp Tables,Sp Executesql,我想在临时表中插入动态记录。 我不想申报这张桌子。我希望在运行时定义它的列。 我这样做是因为表格合同的定义将来可能会改变。因此,临时表应该相应地进行更改。这将在一个存储过程中 我尝试过以下被标记为答案的方法,但没有一种有效 EXECUTE IMMEDIATE  'SELECT top 1 * FROM Contract'   INTO #x select * from #x 此语法应该可以工作,但您需要动态创建sql,然后执行它: SELECT top 1

我想在临时表中插入动态记录。 我不想申报这张桌子。我希望在运行时定义它的列。 我这样做是因为表格合同的定义将来可能会改变。因此,临时表应该相应地进行更改。这将在一个存储过程中

我尝试过以下被标记为答案的方法,但没有一种有效

    EXECUTE IMMEDIATE 
    'SELECT top 1 * FROM Contract'
      INTO #x
    select * from #x

此语法应该可以工作,但您需要动态创建sql,然后执行它:

 SELECT top 1  * 
 INTO #x
 FROM Contract
例如:

  SELECT TOP 0 * INTO #x from Contract 

  DECLARE @ARJ NVARCHAR(MAX)
  SET @ARJ='INSERT INTO #x SELECT TOP 1 * FROM Contract'
  EXECUTE sp_executesql @ARJ
你可以用

SELECT top 1 * INTO #tempTable FROM Contract WHERE <any conditions you might want to filter the data>

我使用这个查询来构建一个包含Contract表的所有字段和相同属性的表。希望对您有所帮助。

此语法应该有效

declare @arj varchar(1000)
set @arj= 'SELECT top 1 * FROM Contract'
declare @charIdex int   
declare @arg2 varchar(1000)


SELECT @charIdex =  CHARINDEX ( 'FROM',
       @arj)
   SELECT @arg2 = STUFF(@arj, @charIdex, 0 , 'into tempTable ');
 exec   ( @arg2)
 select * from tempTable

嗨,Jayachandran,实际上我最初的查询比这个长得多。我刚才提到的是供参考的。所以它必须在一个变量中。所以,这不是我要找的。嗨,杰维,我收到以下信息。1行受影响的对象名称“x”无效。所以它对我不起作用。我已经编辑使用x而不是x。请现在试试。它可以用,但我不能用。没有全局临时表。在这种情况下,唯一的解决方法是在sp之前创建临时表,然后插入其中。我编辑了我的答案以反映这一点。谢谢你,杰维。但是,我收到此错误。只有在使用列列表且启用identity_INSERT时,才能为表“x”中的identity列指定显式值。但现在我知道该怎么办了。谢谢你给了我前进的方向。我真正的疑问远不止这些。这个变量@arj是供参考的。我也有很长的查询时间,而不是在FROM之后的查询中使用的契约。不,先生,最好是在游戏中保留@arj。谢谢你的回复,但是我得到了这个错误无效的对象名“tetrable”。这与我在问题中提到的其他解决方案的错误相同。
SELECT top 1 * INTO #tempTable FROM Contract WHERE <any conditions you might want to filter the data>
select *  
INTO #tempTable
from Contract  
WHERE 1=0 
declare @arj varchar(1000)
set @arj= 'SELECT top 1 * FROM Contract'
declare @charIdex int   
declare @arg2 varchar(1000)


SELECT @charIdex =  CHARINDEX ( 'FROM',
       @arj)
   SELECT @arg2 = STUFF(@arj, @charIdex, 0 , 'into tempTable ');
 exec   ( @arg2)
 select * from tempTable