【问题标题】:how to generate insert data script from #temp tables?如何从#temp 表生成插入数据脚本?
【发布时间】:2015-06-22 07:54:16
【问题描述】:

在数据库中,我有带有数据的#temp 表,我需要生成插入脚本(用于所有数据)。

如何做到这一点?我右键单击 tempDB 并选择 > 任务 > 生成脚本,但我无法选择 #temp 表来生成脚本(它们无法选择)。

如何从我使用 SQL Server 2008 R2 的 #temp 表生成插入脚本。

【问题讨论】:

  • 能否使用SELECT * INTO将其转移到新表中,然后生成脚本?
  • @ughai,你的意思是创建一个物理表吗?
  • 是并在生成脚本后将其删除
  • 这将非常耗时,我将不得不手动创建许多表。请问有更好的方法吗?
  • 您不需要手动创建任何表。您只需要为每个#temp 表设置一个SELECT,例如SELECT * INTO Tbl1 FROM #temp1。该表是自动创建的。查一下

标签: sql-server tsql sql-server-2008-r2 ssms


【解决方案1】:

您可以将查询结果插入到sql表中(临时表,它会自动创建):

SELECT * INTO myTempTable FROM (query results) 

例如:SELECT * INTO myTempTable FROM user where condition

一个名为 myTempTable 的表将在架构 dbo 中创建 然后点击数据库点击:

Tasks > Generate Scripts

然后你选择表myTempTable

【讨论】:

  • 小提示:不要使用# 作为表名的前缀。你用generate Scripts时找不到你的表
【解决方案2】:

另一种最好的方法是更快但更长。

使用 SqlPubWiz

去吧:

C:\Program Files (x86)\Microsoft SQL Server\90\Tools\Publishing\1.4

运行并填写有关登录数据库所需的信息,然后选择您的数据库并获取您的整个数据库脚本,并在您保存的脚本文件中找到您想要的表的插入脚本。

【讨论】:

    【解决方案3】:

    您可以使用以下查询批处理为temp tables 生成脚本,并且可以根据条件选择行。我从here 得到这个。在原始源中,作者创建了Stored Procedure 用于生成脚本。我已经格式化和修改了声明TableName 的条件。您需要使用您的#temp table nametempdb 中运行此查询批处理。感谢Neeraj Prasad Sharma

    DECLARE @QUERY VARCHAR(MAX) = 'Dbo.#Temp where 1 = 1'
    
    SET NOCOUNT ON
    
    DECLARE @WithStrINdex AS INT
    DECLARE @WhereStrINdex AS INT
    DECLARE @INDExtouse AS INT
    
    DECLARE @SchemaAndTAble VARCHAR(270)
    DECLARE @Schema_name VARCHAR(30)
    DECLARE @Table_name VARCHAR(240)
    DECLARE @Condition VARCHAR(MAX) 
    
    SELECT @WithStrINdex = 0
    SELECT @WithStrINdex = CHARINDEX('WITH', @Query), @WhereStrINdex = CHARINDEX('WHERE', @Query)
    
    IF(@WithStrINdex != 0)
        SELECT @INDExtouse = @WithStrINdex
    ELSE
        SELECT @INDExtouse = @WhereStrINdex
    
    SELECT @SchemaAndTAble  =  LEFT(@Query, @INDExtouse - 1) 
    SELECT @SchemaAndTAble = LTRIM(RTRIM(@SchemaAndTAble))
    
    SELECT @Schema_name = LEFT(@SchemaAndTAble, CHARINDEX('.', @SchemaAndTAble ) - 1)
    ,@Table_name  =  SUBSTRING(@SchemaAndTAble, CHARINDEX('.', @SchemaAndTAble ) + 1, LEN(@SchemaAndTAble))
    ,@CONDITION = SUBSTRING(@Query, @WhereStrINdex + 6, LEN(@Query))--27+6
    
    
    DECLARE @COLUMNS TABLE([Row_number] SMALLINT, Column_Name VARCHAR(MAX))
    DECLARE @CONDITIONS AS VARCHAR(MAX)
    DECLARE @Total_Rows AS SMALLINT
    DECLARE @Counter AS SMALLINT
    
    DECLARE @ComaCol AS VARCHAR(MAX)
    SELECT @ComaCol = '', @Counter = 1, @CONDITIONS = '' 
    
    print @Schema_name
    print @Table_name
    
    INSERT INTO @COLUMNS
    SELECT ROW_NUMBER() OVER(ORDER BY ORDINAL_POSITION) [Count] ,COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @Schema_name
    AND TABLE_NAME = @Table_name 
    AND COLUMN_NAME NOT IN ('SYNCDESTINATION','PENDINGSYNCDESTINATION' ,'SKUID','SALECREDITEDTO')
    
    SELECT @Total_Rows = COUNT(*) FROM @COLUMNS
    SELECT @Table_name = '['+@Table_name+']'
    SELECT @Schema_name = '['+@Schema_name+']'
    
    WHILE (@Counter< = @Total_Rows )
    BEGIN 
        SELECT @ComaCol =  @ComaCol + ' ['+Column_Name+'],' FROM @COLUMNS
        Where [Row_number] = @Counter
    
        SELECT @CONDITIONS = @CONDITIONS+ ' + CASE WHEN ['+Column_Name+'] IS NULL THEN ''NULL'' ELSE '''''''' + 
                        REPLACE( CONVERT(VARCHAR(MAX),['+Column_Name+']) ,'''''''','''')
                        +'''''''' END +'+''','''
                        FROM @COLUMNS WHERE [Row_number] = @Counter
    
            SET @Counter = @Counter + 1
    END
    
    SELECT @CONDITIONS = RIGHT(@CONDITIONS, LEN(@CONDITIONS) -2)
    
    SELECT @CONDITIONS = LEFT(@CONDITIONS, LEN(@CONDITIONS) -4)
    
    SELECT @ComaCol =  SUBSTRING (@ComaCol, 0, LEN(@ComaCol))
    
    SELECT @CONDITIONS =  '''INSERT INTO ' + @Schema_name + '.' + @Table_name + '(' + @ComaCol + ')' +' VALUES( '+'''' + '+' + @CONDITIONS
    SELECT @CONDITIONS = @CONDITIONS + '+' + ''')'''
    
    SELECT @CONDITIONS =  'SELECT' + @CONDITIONS + 'FROM' + @Schema_name + '.' + @Table_name + ' WITH(NOLOCK) ' + ' WHERE ' + @Condition
    PRINT(@CONDITIONS)
    EXEC(@CONDITIONS)
    

    【讨论】:

      【解决方案4】:

      您必须右键单击数据库并单击

      Tasks -> Generate Scripts
      

      现在你有一个弹出屏幕转到下一次点击

      Select specific database objects
      

      现在从表格选项中选择您的表格,然后单击下一步,现在您有高级按钮点击它。

      您将有另一个小弹出屏幕可供选择 要编写脚本并选择的数据类型

      Data only
      

      单击“确定”,不要忘记将路径作为文件名查看,您的脚本会在其中小心保存。

      现在单击“下一步”,然后再次单击“下一步”,您的脚本已准备好数据。

      【讨论】:

      • 我也在做同样的事情,但是点击特定的“数据库对象”我看不到我的临时表。你是说我会看到我的#temp 表点击这个选项?
      • 您也可以通过将临时表的数据复制到新表并获取新表的脚本来实现。
      • 您也可以使用 SSMS 工具包,只需转到 ssmstoolspack.com/Features?f=9 看看它是如何工作的!
      • 好吧,你可以在这里得到你的解决方案stackoverflow.com/questions/12815496/…
      • 这是用于 PostgreSQL,不适用于 SQL Server
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-27
      • 1970-01-01
      • 2013-12-24
      相关资源
      最近更新 更多