【问题标题】:Converting Select results into Insert script - SQL Server [closed]将选择结果转换为插入脚本 - SQL Server [关闭]
【发布时间】:2011-05-30 09:55:59
【问题描述】:

我有SQL Server 2008,SQL Server Management Studio。

我需要从 database1 中的Table1 中选择数据。然后我必须编辑结果中的一些值和 database2 中的insert values into Table1

或者让我换个说法。

如何将一张表中的数据转换成insert script

【问题讨论】:

  • 数据库是否在同一台服务器上?如果是这样,您可以从一个插入另一个。插入 database2.dbo.myTable 从 database1.dbo.anOtherTable 中选择数据
  • 是的,两个数据库都在同一台服务器上。但我需要脚本。我会把这个脚本交给我们的数据库人员。
  • 这将有助于澄清问题。任何方法都行得通吗?或者您是否需要一个可以交给您的 dba 的插入脚本?

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


【解决方案1】:

这是另一种方法,在某些情况下可能比安装插件或外部工具更容易:

  • 做一个select [whatever you need]INTO temp.table_namefrom [... etc ...]
  • 在对象资源管理器中右键单击数据库 => 任务 => 生成脚本
  • 在“选择对象”屏幕中选择temp.table_name,点击下一步。
  • 在“指定如何保​​存脚本”屏幕中:
    • 点击高级,找到“脚本的数据类型”属性,选择“仅数据”,关闭高级属性。
    • 选择“保存到新查询窗口”(除非您有数千条记录)。
  • 单击下一步,等待作业完成,观察生成的INSERT 语句出现在新的查询窗口中。
  • 使用 Find & Replace 将所有 [temp.table_name] 更改为 [your_table_name]
  • drop table [temp.table_name]

【讨论】:

  • 使用 INTO temp.table1 会产生以下错误:指定的模式名称“temp”要么不存在,要么您没有使用它的权限。我正在使用 SQL 2012。
  • temp 这里指的是您可以访问的任何架构。您可以创建一个 (create schema temp),然后在完成后将其删除,或者(更好)简单地使用您当前正在使用的任何架构。
  • 谢谢你,我知道一定有办法!顺便说一句,如果您只需要要编写脚本的表中的全部数据,则可以跳过创建临时表。
  • 我不得不使用它来将数据导入 Azure 数据库。将其导入非天蓝色数据库,然后提取为 SQL 插入。
  • 让我感到惊讶的是,SSMS 没有在结果集上添加“将输出作为插入脚本查看”的功能。但上述方法有效,尽管它创建了单独的插入命令而不是执行正确的像它应该的那样批量插入(比如每个插入 1,000 个项目)。这可能需要很长时间才能在非常大的结果集上运行
【解决方案2】:

在 SSMS 中:

  • 右击数据库>任务>生成脚本

  • 下一步

  • 选择“选择特定的数据库对象”并检查您要编写脚本的表,下一步

  • 在选项列表中单击Advanced >,向下滚动到底部并查找“要脚本的数据类型”并将其更改为“仅数据”>确定

  • 选择“保存到新查询窗口”> 下一步 > 下一步 > 完成

现在所有 180 行都写成 180 个插入语句!

【讨论】:

  • 对几行有用。 没用:如果一个表有 20000 行,我只想要 20 行插入 20 行。
  • @Kiquenet - 您可以首先创建一个选择所需 20 行的视图,然后按照以下步骤创建基于视图的插入脚本。然后,您可以进行批量查找和替换以将视图名称更改回您需要插入的任何表名称。
  • @tember 它不像你说的那样在 View 上工作,但它在 Visual Studio 中工作:首先你在 sql studio 中创建一个具有所需选择的视图,然后打开 Visual Studio,连接到 sql server 并生成在创建的视图上编写脚本。
  • 感谢您提供的信息。虽然倾倒整张桌子有点过头了,但它解决了我的问题。
  • 救命稻草。我一生都在写剧本。
【解决方案3】:

本机方法

例如,如果你有桌子

Users(Id, name)

你可以这样做:

select 'insert into Table values(Id=' + Id + ', name=' + name + ')' from Users

【讨论】:

  • 您可以这样做,但如果您有多个表格,则需要输入一些内容。在 google 上可以找到为您执行此操作的 sps,或者,如果您有 VS2012,您可以让 VS 为您执行此操作。请参阅下面的答案。
  • 对于字段很少的表很有用。如果一个表有 50、60、100 列就没用了。更好的生成 SQL 代码
【解决方案4】:

SSMS 工具包(与啤酒一样免费)具有多种出色的功能 - 包括表格中的generating INSERT statements

更新:对于 SQL Server Management Studio 2012(及更新版本),SSMS Toolpack 不再免费,但需要支付适度的许可费用。

【讨论】:

  • +1 @marc_s 我做了很多工作来生成这样的插入脚本而不是 T-SQL 生成器脚本,现在你告诉我有一个工具。
  • 当表存储 money 数据时要小心。这些数据类型可以存储比通常显示或 SSMS 工具包生成的脚本中更多的小数位
  • 这不再是免费的。 ssmstoolspack.com/Licensing
  • @Greg:感谢您指出这一点。注意:该许可仅适用于 SQL Server Management Studio 2012 及更高版本 - 对于早期版本,该工具包仍然是免费的。
  • 替代 SSMS 工具包 ?
【解决方案5】:

1- 脚本解释

A)在表格中插入数据的语法如下

Insert into table(col1,col2,col3,col4,col5)    

             -- To achieve this part i    
             --have used below variable
                ------@CSV_COLUMN-------

values(Col1 data in quote, Col2..quote,..Col5..quote)

-- To achieve this part 
-- i.e column data in 
--quote i have used 
--below variable
----@QUOTED_DATA---

C)从现有数据中获取上述数据 表我们必须写选择 以这样的方式查询输出 将采用上述脚本的形式

D)然后我终于连接了 上面要创建的变量 最终脚本将 执行时生成插入脚本

E)

@TEXT='SELECT ''INSERT INTO
 '+@TABLE_NAME+'('+@CSV_COLUMN+')VALUES('''+'+'+SUBSTRING(@QUOTED_DATA,1,LEN(@QUOTED_DATA)-5)+'+'+''')'''+' Insert_Scripts FROM '+@TABLE_NAME + @FILTER_CONDITION

F)最后执行了上面的查询EXECUTE(TEXT)

G)QUOTENAME() 函数用于包装 引号内的列数据

H)ISNULL 被使用,因为如果任何行有NULL 查询失败的任何列的数据 并返回NULL 这就是为什么要避免 我用过ISNULL

I)并创建了 sp sp_generate_insertscripts 一样的

1- 只需输入您想要的表名insert script

2- 如果您想要特定结果,请过滤条件

----------Final Procedure To generate Script------

CREATE PROCEDURE sp_generate_insertscripts
(
    @TABLE_NAME VARCHAR(MAX),
    @FILTER_CONDITION VARCHAR(MAX)=''
)
AS
BEGIN

SET NOCOUNT ON

DECLARE @CSV_COLUMN VARCHAR(MAX),
        @QUOTED_DATA VARCHAR(MAX),
        @TEXT VARCHAR(MAX)

SELECT @CSV_COLUMN=STUFF
(
    (
     SELECT ',['+ NAME +']' FROM sys.all_columns 
     WHERE OBJECT_ID=OBJECT_ID(@TABLE_NAME) AND 
     is_identity!=1 FOR XML PATH('')
    ),1,1,''
)

SELECT @QUOTED_DATA=STUFF
(
    (
     SELECT ' ISNULL(QUOTENAME('+NAME+','+QUOTENAME('''','''''')+'),'+'''NULL'''+')+'','''+'+' FROM sys.all_columns 
     WHERE OBJECT_ID=OBJECT_ID(@TABLE_NAME) AND 
     is_identity!=1 FOR XML PATH('')
    ),1,1,''
)

SELECT @TEXT='SELECT ''INSERT INTO '+@TABLE_NAME+'('+@CSV_COLUMN+')VALUES('''+'+'+SUBSTRING(@QUOTED_DATA,1,LEN(@QUOTED_DATA)-5)+'+'+''')'''+' Insert_Scripts FROM '+@TABLE_NAME + @FILTER_CONDITION

--SELECT @CSV_COLUMN AS CSV_COLUMN,@QUOTED_DATA AS QUOTED_DATA,@TEXT TEXT

EXECUTE (@TEXT)

SET NOCOUNT OFF

END

【讨论】:

  • 你做得很棒......
  • 这个存储过程是一个很好的解决方案。我建议做一些小的改动。在最长行的末尾,将+ @FILTER 更改为+ IIF(@FILTER='','',' WHERE ' + @FILTER),这样您就可以在不包含单词WHERE 的情况下通过过滤器。另一个更改是在两个 SELECT 查询的 WHERE 中添加 AND system_type_id <> 189 AND is_computed=0 以忽略 timestampcomputed 列。为其他专业列类型添加额外的排除项很容易。
【解决方案6】:

可以通过 Visual Studio SQL Server 对象资源管理器来完成。

您可以从上下文菜单中单击“查看数据”以查看必要的表格,过滤结果并将结果保存为脚本。

【讨论】:

  • 您的帖子是在 Visual Studio 中使用 SQL Server Data Tools 的正确且最简单的方法,herehere 是帖子,它解释了如何为前 1000 行生成插入语句希望有所帮助。
【解决方案7】:

使用 Visual Studio,执行以下操作

创建 SQL Server 类型的项目-->SQL Server 数据库项目

打开sql server explorer CTL-\, CTL-S

通过右键单击 SQL SERVER 图标添加 SQL Server。选择添加新服务器

向下导航到您感兴趣的表格

右击-->查看数据

单击左上角的单元格以突出显示所有内容(ctl-A 似乎不起作用)

右键-->脚本

这太棒了。这些年来,我已经尝试了上面列出的所有方法。我知道有一个工具可以做到这一点,还有更多,想不出它的名字。但它非常昂贵。

祝你好运。我只是想通了。尚未使用文本字段等对其进行广泛测试,但看起来它会让您走得很远。

格雷格

【讨论】:

  • 这不会转换选择结果,它只是将表格脚本化。
  • @QuantumDynamix - 原始问题在底部通过“如何将一个表中的数据转换为脚本”进行了澄清。下面是我的方法的一个示例。这正是用户所要求的。事实上,这是我看到的唯一一个实际生成插入脚本的解决方案,正如用户所要求的那样。为什么投反对票? “不转换选择结果”是什么意思? SET IDENTITY_INSERT [PMDB].[BUAttr] ON INSERT INTO [PMDB].[BUAttr] ([id], [BU], [Name], [Value]) VALUES (1, N'ALASKA', N'GeoCenter Lat' , N'67.07213')
  • 这与创建临时表一起为我做了
【解决方案8】:

使用 into 语句创建一个单独的表 例如

Select * into Test_123 from [dbo].[Employee] where Name like '%Test%'

转到数据库 右键单击数据库 点击生成脚本 选择您的餐桌 选择高级选项并选择属性“仅数据” 选择文件“在新查询中打开”

Sql 会为你生成脚本

【讨论】:

    【解决方案9】:

    这是一个更通用的解决方案(可以做的比问题要求的多一点),并且可以在查询窗口中使用,而无需创建新的存储过程 - 在生产数据库中很有用,例如您不需要有写权限。

    要使用代码,请根据行内解释其用法的 cmets 进行修改。然后,您可以在查询窗口中运行此查询,它会打印您需要的 INSERT 语句。

    SET NOCOUNT ON
    
    -- Set the ID you wish to filter on here
    DECLARE @id AS INT = 123
    
    DECLARE @tables TABLE (Name NVARCHAR(128), IdField NVARCHAR(128), IdInsert BIT, Excluded NVARCHAR(128))
    
    -- Add any tables you wish to generate INSERT statements for here. The fields are as thus:
     -- Name: Your table name
     -- IdField: The field on which to filter the dataset
     -- IdInsert: If the primary key field is to be included in the INSERT statement
     -- Excluded: Any fields you do not wish to include in the INSERT statement
    INSERT INTO @tables (Name, IdField, IdInsert, Excluded) VALUES ('MyTable1', 'Id', 0, 'Created,Modified')
    INSERT INTO @tables (Name, IdField, IdInsert, Excluded) VALUES ('MyTable2', 'Id', 1, 'Created,Modified')
    
    DECLARE @numberTypes TABLE (sysId TINYINT)
    
    -- This will ensure INT and BIT types are not surrounded with quotes in the
    -- resultant INSERT statement, but you may need to add more (from sys.types)
    INSERT @numberTypes(SysId) VALUES(56),(104)
    
    DECLARE @rows INT = (SELECT COUNT(*) FROM @tables)
    DECLARE @cnt INT = 1
    
    DECLARE @results TABLE (Sql NVARCHAR(4000))
    
    WHILE @cnt <= @rows
    BEGIN
        DECLARE @tablename AS NVARCHAR(128)
        DECLARE @idField AS NVARCHAR(128)
        DECLARE @idInsert AS BIT
        DECLARE @excluded AS NVARCHAR(128)
        SELECT
            @tablename = Name,
            @idField = IdField,
            @idInsert = IdInsert,
            @excluded = Excluded
        FROM (SELECT *, ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS RowId FROM @tables) t WHERE t.RowId = @cnt
    
        DECLARE @excludedFields TABLE (FieldName NVARCHAR(128))
        DECLARE @xml AS XML = CAST(('<X>' + REPLACE(@excluded, ',', '</X><X>') + '</X>') AS XML)
        INSERT INTO @excludedFields SELECT N.value('.', 'NVARCHAR(128)') FROM @xml.nodes('X') AS T(N)
    
        DECLARE @setIdentity NVARCHAR(128) = 'SET IDENTITY_INSERT ' + @tablename
    
        DECLARE @execsql AS NVARCHAR(4000) = 'SELECT ''' + CASE WHEN @idInsert = 1 THEN @setIdentity + ' ON' + CHAR(13) ELSE '' END + 'INSERT INTO ' + @tablename + ' ('
        SELECT @execsql = @execsql +
        STUFF
        (
            (
                SELECT CASE WHEN NOT EXISTS(SELECT * FROM @excludedFields WHERE FieldName = name) THEN ', ' + name ELSE '' END
                FROM sys.columns
                WHERE object_id = OBJECT_ID('dbo.' + @tablename)
                FOR XML PATH('')
            ), 1, 2, ''
        ) +
        ')' + CHAR(13) + 'VALUES (' +
        STUFF
        (
            (
                SELECT
                    CASE WHEN NOT EXISTS(SELECT * FROM @excludedFields WHERE FieldName = name) THEN
                        ''', '' + ISNULL(' +
                        CASE WHEN EXISTS(SELECT * FROM @numberTypes WHERE SysId = system_type_id) THEN '' ELSE ''''''''' + ' END +
                        'CAST(' + name + ' AS VARCHAR)' +
                        CASE WHEN EXISTS(SELECT * FROM @numberTypes WHERE SysId = system_type_id) THEN '' ELSE ' + ''''''''' END +
                        ', ''NULL'') + '
                    ELSE ''
                    END
                FROM sys.columns
                WHERE object_id = OBJECT_ID('dbo.' + @tablename)
                FOR XML PATH('')
            ), 1, 3, ''
        ) +
        ''')' + CASE WHEN @idInsert = 1 THEN CHAR(13) + @setIdentity + ' OFF' ELSE '' END +
        ''' FROM ' + @tablename + ' WHERE ' + @idField + ' = ' + CAST(@id AS VARCHAR)
    
        INSERT @results EXEC (@execsql)
        DELETE @excludedFields
        SET @cnt = @cnt + 1
    END
    
    DECLARE cur CURSOR FOR SELECT Sql FROM @results
    OPEN cur
    
    DECLARE @sql NVARCHAR(4000)
    FETCH NEXT FROM cur INTO @sql
    WHILE @@FETCH_STATUS = 0
    BEGIN
        PRINT @sql
        FETCH NEXT FROM cur INTO @sql
    END
    
    CLOSE cur
    DEALLOCATE cur
    

    【讨论】:

      【解决方案10】:

      您可以在 SSMS 中选择“结果到文件”选项,然后将选择的结果导出到文件并在结果文件中进行更改,最后使用 BCP - 您可以在数据库 2 的表 1 中插入批量复制。

      我认为对于批量插入,您必须将 .rpt 文件转换为 .csv 文件

      希望它会有所帮助。

      【讨论】:

        【解决方案11】:

        我遇到了类似的问题,但我需要能够从查询中创建一个 INSERT 语句(使用过滤器等)

        所以我创建了以下程序:

        CREATE PROCEDURE dbo.ConvertQueryToInsert (@input NVARCHAR(max), @target NVARCHAR(max)) AS BEGIN
        
            DECLARE @fields NVARCHAR(max);
            DECLARE @select NVARCHAR(max);
        
            -- Get the defintion from sys.columns and assemble a string with the fields/transformations for the dynamic query
            SELECT
                @fields = COALESCE(@fields + ', ', '') + '[' + name +']', 
                @select = COALESCE(@select + ', ', '') + ''''''' + ISNULL(CAST([' + name + '] AS NVARCHAR(max)), ''NULL'')+'''''''
            FROM tempdb.sys.columns 
            WHERE [object_id] = OBJECT_ID(N'tempdb..'+@input);
        
            -- Run the a dynamic query with the fields from @select into a new temp table
            CREATE TABLE #ConvertQueryToInsertTemp (strings nvarchar(max))
            DECLARE @stmt NVARCHAR(max) = 'INSERT INTO #ConvertQueryToInsertTemp SELECT '''+ @select + ''' AS [strings] FROM '+@input
            exec sp_executesql @stmt
        
            -- Output the final insert statement 
            SELECT 'INSERT INTO ' + @target + ' (' + @fields + ') VALUES (' + REPLACE(strings, '''NULL''', 'NULL') +')' FROM #ConvertQueryToInsertTemp
        
            -- Clean up temp tables
            DROP TABLE #ConvertQueryToInsertTemp
            SET @stmt = 'DROP TABLE ' + @input
            exec sp_executesql @stmt
        END
        

        然后您可以通过将查询的输出写入临时表并运行该过程来使用它:

        -- Example table
        CREATE TABLE Dummy (Id INT, Comment NVARCHAR(50), TimeStamp DATETIME)
        INSERT INTO Dummy VALUES (1 , 'Foo', GetDate()), (2, 'Bar', GetDate()), (3, 'Foo Bar', GetDate())
        
        -- Run query and procedure
        SELECT * INTO #TempTableForConvert FROM Dummy WHERE Id < 3
        EXEC dbo.ConvertQueryToInsert '#TempTableForConvert', 'dbo.Dummy'
        

        注意: 此过程仅将值转换为可能导致数据看起来有点不同的字符串。以 DATETIME 为例,秒数会丢失。

        【讨论】:

          【解决方案12】:

          我创建了以下procedure

          if object_id('tool.create_insert', 'P') is null
          begin
            exec('create procedure tool.create_insert as');
          end;
          go
          
          alter procedure tool.create_insert(@schema    varchar(200) = 'dbo',
                                             @table     varchar(200),
                                             @where     varchar(max) = null,
                                             @top       int = null,
                                             @insert    varchar(max) output)
          as
          begin
            declare @insert_fields varchar(max),
                    @select        varchar(max),
                    @error         varchar(500),
                    @query         varchar(max);
          
            declare @values table(description varchar(max));
          
            set nocount on;
          
            -- Get columns
            select @insert_fields = isnull(@insert_fields + ', ', '') + c.name,
                   @select = case type_name(c.system_type_id)
                                when 'varchar' then isnull(@select + ' + '', '' + ', '') + ' isnull('''''''' + cast(' + c.name + ' as varchar) + '''''''', ''null'')'
                                when 'datetime' then isnull(@select + ' + '', '' + ', '') + ' isnull('''''''' + convert(varchar, ' + c.name + ', 121) + '''''''', ''null'')'
                                else isnull(@select + ' + '', '' + ', '') + 'isnull(cast(' + c.name + ' as varchar), ''null'')'
                              end
              from sys.columns c with(nolock)
                   inner join sys.tables t with(nolock) on t.object_id = c.object_id
                   inner join sys.schemas s with(nolock) on s.schema_id = t.schema_id
             where s.name = @schema
               and t.name = @table;
          
            -- If there's no columns...
            if @insert_fields is null or @select is null
            begin
              set @error = 'There''s no ' + @schema + '.' + @table + ' inside the target database.';
              raiserror(@error, 16, 1);
              return;
            end;
          
            set @insert_fields = 'insert into ' + @schema + '.' + @table + '(' + @insert_fields + ')';
          
            if isnull(@where, '') <> '' and charindex('where', ltrim(rtrim(@where))) < 1
            begin
              set @where = 'where ' + @where;
            end
            else
            begin
              set @where = '';
            end;
          
            set @query = 'select ' + isnull('top(' + cast(@top as varchar) + ')', '') + @select + ' from ' + @schema + '.' + @table + ' with (nolock) ' + @where;
          
            insert into @values(description)
            exec(@query);
          
            set @insert = isnull(@insert + char(10), '') + '--' + upper(@schema + '.' + @table);
          
            select @insert = @insert + char(10) + @insert_fields + char(10) + 'values(' + v.description + ');' + char(10) + 'go' + char(10)
              from @values v
             where isnull(v.description, '') <> '';
          end;
          go
          

          那么你可以这样使用它:

          declare @insert varchar(max),
                  @part   varchar(max),
                  @start  int,
                  @end    int;
          
          set @start = 1;
          
          exec tool.create_insert @schema = 'dbo',
                                  @table = 'customer',
                                  @where  = 'id = 1',
                                  @insert = @insert output;
          
          -- Print one line to avoid the maximum 8000 characters problem
          while len(@insert) > 0
          begin
            set @end = charindex(char(10), @insert);
          
            if @end = 0
            begin
              set @end = len(@insert) + 1;
            end;
          
            print substring(@insert, @start, @end - 1);
            set @insert = substring(@insert, @end + 1, len(@insert) - @end + 1);
          end;
          

          输出会是这样的:

          --DBO.CUSTOMER
          insert into dbo.customer(id, name, type)
          values(1, 'CUSTOMER NAME', 'F');
          go
          

          如果您只想获取一系列行,请使用@top 参数,如下所示:

          declare @insert varchar(max),
                  @part   varchar(max),
                  @start  int,
                  @end    int;
          
          set @start = 1;
          
          exec tool.create_insert @schema = 'dbo',
                                  @table = 'customer',
                                  @top    = 100,
                                  @insert = @insert output;
          
          -- Print one line to avoid the maximum 8000 characters problem
          while len(@insert) > 0
          begin
            set @end = charindex(char(10), @insert);
          
            if @end = 0
            begin
              set @end = len(@insert) + 1;
            end;
          
            print substring(@insert, @start, @end - 1);
            set @insert = substring(@insert, @end + 1, len(@insert) - @end + 1);
          end;
          

          【讨论】:

          • 它有帮助,但它将此字段“6C2A94737A456C405FDCF793DFA6E661:BqRc/DpUIe27”截断为“6C2A94737A456C405FDCF793DFA6E6”
          【解决方案13】:

          您可以使用专为导入和导出操作设计的Sql Server 集成服务包

          如果你完全安装了 Sql Server,VS 有一个用于开发这些包的包。

          Integration Services in Business Intelligence Development Studio

          【讨论】:

            【解决方案14】:

            我认为它也可以用于临时查询 您可以将结果导出到 excel 文件,然后将该文件导入您的数据表对象或按原样使用它,然后将 excel 文件导入第二个数据库 看看这个链接 这对你有很大帮助。

            http://vscontrols.blogspot.com/2010/09/import-and-export-excel-to-sql-server.html

            【讨论】:

              【解决方案15】:

              如果您使用 Oracle(或将应用程序配置到 SQL Server),那么 Oracle SQL Developer 会为您执行此操作。为表选择“卸载”并按照选项进行操作(如果您不希望所有表都创建内容,请取消勾选 DDL)。

              【讨论】:

              • 这被明确标记为 SQL Server 问题...
              • 也可以将oracle sql developer与sql server一起使用。我已经编辑了我的回复。
              【解决方案16】:

              我发现了这个SMSMS Boost 插件,它是免费的,并且可以做到这一点。您可以右键单击结果并选择 Script data as。

              【讨论】:

              • 我查看了 脚本网格数据,但没有从结果中生成 SQL 插入
              【解决方案17】:

              您可以使用这个Q2C.SSMSPlugin,它是免费和开源的。您可以右键单击并选择“执行查询到命令... -> 查询到插入...”。享受)

              【讨论】:

              • 对 SSMS 2012 有效吗?
              【解决方案18】:

              您可以使用INSERT INTO SELECT 语句将选择查询的结果插入到表中。 http://www.w3schools.com/sql/sql_insert_into_select.asp

              例子:

              INSERT INTO Customers (CustomerName, Country)
              SELECT SupplierName, Country
              FROM Suppliers
              WHERE Country='Germany'
              

              【讨论】:

              • 这与 SELECT 语句转换为 INSERT 语句的结果无关。这只是普通的 INSERT 语句。
              • 在功能上不是等效的吗?
              • 很抱歉回复晚了。我没有注意到通知。但是,如果我们想在完全不同的环境中插入结果,这将不起作用。假设我们有一个带有测试数据库的测试服务器,我们有一个带有生产数据库的生产服务器。这 2 个是 100% 分离的。所以我们不能在这种情况下使用您的查询。我同意它根据结果插入记录。只是大多数搜索这个问题的人都有一个接近我的场景的场景。 (或者考虑在不同服务器上使用的数据库/表模板脚本)
              猜你喜欢
              • 2010-12-18
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-11-08
              • 2018-10-17
              • 1970-01-01
              相关资源
              最近更新 更多