복붙노트

[SQL] 삽입 스크립트에 선택 결과를 변환 - SQL 서버 [마감]

SQL

삽입 스크립트에 선택 결과를 변환 - SQL 서버 [마감]

내가 가진 SQL 서버 2008, SQL Server Management Studio를.

나는 database1의 표에서 데이터를 선택해야합니다. 그럼 난 편집에 결과 및 DATABASE2의 표에 값을 삽입 일부 값을 가지고있다.

또는 내가 그것을 다른 방법을 넣어 보자.

어떻게 삽입 스크립트에 하나 개의 테이블에서 데이터를 변환 할 수 있습니다.

해결법

  1. ==============================

    1.테이블에서 INSERT 문을 생성 포함 - (맥주로 무료입니다) SSMS Toolpack 큰 다양한 기능이 있습니다.

    테이블에서 INSERT 문을 생성 포함 - (맥주로 무료입니다) SSMS Toolpack 큰 다양한 기능이 있습니다.

    업데이트 : SQL Server 관리 Studio 2012 (및 이상)에 대한, SSMS Toolpack는 더 이상 무료 없지만, 겸손한 라이센스 비용을 필요로한다.

  2. ==============================

    2.다음은 몇 가지 상황에서 플러그인이나 외부 도구를 설치하는 것보다 쉬울 수있는 또 다른 방법이있다 :

    다음은 몇 가지 상황에서 플러그인이나 외부 도구를 설치하는 것보다 쉬울 수있는 또 다른 방법이있다 :

  3. ==============================

    3.에서 SSMS :

    에서 SSMS :

    모든 180 행은 이제 180 삽입 문으로 작성!

  4. ==============================

    4.기본 방법 :

    기본 방법 :

    예를 들어, 당신은 테이블이있는 경우

    Users(Id, name)
    

    이 작업을 수행 할 수 있습니다 :

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

    5.1 스크립트의 설명

    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) 그리고 마지막으로 내가 연접가 상기 가변 만들 의지의 최종 스크립트 실행에 삽입 스크립트를 생성

    IS)

    @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 () 함수는 랩으로 사용 따옴표 안에 열 데이터

    임의의 행이 NULL이 있으면 때문에 H)이 사용된다 ISNULL 데이터는 열에 대한 쿼리가 실패 및 반환 NULL 이잖아 왜 피하려면 내가 사용하고 그 ISNULL

    I)과 같은 위해 만든 SP sp_generate_inserts 스크립트

    1 단지는 스크립트를 삽입하고자하는 테이블 이름을 넣어

    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
    
  6. ==============================

    6.그것은 비주얼 스튜디오 SQL 서버 개체 탐색기를 통해 할 수있다.

    그것은 비주얼 스튜디오 SQL 서버 개체 탐색기를 통해 할 수있다.

    당신은 필요한 테이블, 필터 결과 및 스크립트 등의 결과를 저장 컨텍스트 메뉴에서 "데이터보기"를 클릭 할 수 있습니다.

  7. ==============================

    7.비주얼 스튜디오를 사용하여 다음을 수행

    비주얼 스튜디오를 사용하여 다음을 수행

    형 SQL 서버의 프로젝트를 생성 -> SQL Server 데이터베이스 프로젝트

    CTL- 탐색기에서 SQL Server를 열고 \, CTL-S

    SQL 서버 아이콘을 마우스 오른쪽 버튼으로 클릭하여 SQL 서버를 추가합니다. 선택 ADD NEW 서버

    관심있는 테이블 아래로 이동

    마우스 오른쪽 버튼으로 클릭 -> 데이터보기

    (CTLA가 작동하지 않는 것) 하이라이트 모든 것을 왼쪽 상단 셀을 클릭

    마우스 오른쪽 클릭 -> 스크립트

    이 멋진입니다. 나는 수년에 걸쳐 위에 나열된 모든 것을 시도했다. 나는이 작업을 수행하고 훨씬 더, 그것의 이름을 생각하지 못할 거기 도구가 알고있다. 그러나 그것은 매우 비싸다.

    행운을 빕니다. 난 그냥이 아웃 생각. 그것은 등 광범위하게 w / 텍스트 필드 테스트를하지만, 그것은 당신에게 길 아래로 긴 방법을 얻을 것 같습니다하지 않았습니다.

    그렉

  8. ==============================

    8.문에 사용하여 별도의 테이블을 만듭니다 예를 들면

    문에 사용하여 별도의 테이블을 만듭니다 예를 들면

    [DBO]에서 Test_123에 *를 선택합니다. [직원] 여기서 이름 '% 테스트 %'와 같은

    데이터베이스로 이동 마우스 오른쪽 버튼으로 데이터베이스를 클릭합니다 스크립트를 생성에 클릭 테이블을 선택 advanace 옵션을 선택하고 속성을 선택 "데이터 전용" "새 쿼리에서 열린"파일을 선택

    SQL은 당신을위한 스크립트를 생성합니다

  9. ==============================

    9.당신은 BCP를 사용하여 마지막으로 선택 SSMS에서 옵션 '파일에 결과'및 파일에 선택 결과를 내보내고 결과 파일의 변경을 할 수 있습니다 - 대량 당신이 데이터베이스 2 표 1에 삽입 할 수 있습니다 복사합니다.

    당신은 BCP를 사용하여 마지막으로 선택 SSMS에서 옵션 '파일에 결과'및 파일에 선택 결과를 내보내고 결과 파일의 변경을 할 수 있습니다 - 대량 당신이 데이터베이스 2 표 1에 삽입 할 수 있습니다 복사합니다.

    당신이 .CSV 파일로 .RPT 파일을 변환해야 INSERT I 대량에 대한 생각

    그것이 도움이되기를 바랍니다.

  10. ==============================

    10.(필터 등으로) 나는 비슷한 문제가 있었다,하지만 난 쿼리에서 INSERT 문을 만들 수 있도록 필요한

    (필터 등으로) 나는 비슷한 문제가 있었다,하지만 난 쿼리에서 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으로 초는 손실됩니다.

  11. ==============================

    11.이것은 더 솔루션을 다양한 (즉, 더 많은 질문을 물어보다 조금 할 수 있음), 그리고 새로운 저장된 프로 시저 작성하지 않고도 쿼리 창에서 사용할 수 있습니다 - 당신은 쓰기 권한이없는 예를 들어 프로덕션 데이터베이스에서 유용 .

    이것은 더 솔루션을 다양한 (즉, 더 많은 질문을 물어보다 조금 할 수 있음), 그리고 새로운 저장된 프로 시저 작성하지 않고도 쿼리 창에서 사용할 수 있습니다 - 당신은 쓰기 권한이없는 예를 들어 프로덕션 데이터베이스에서 유용 .

    코드를 사용하려면, 그 사용법을 설명하는 선에서 의견에 따라 수정하십시오. 당신은 단지 쿼리 창에서이 쿼리를 실행할 수 있으며, 그것은 당신이 필요로하는 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
    
  12. ==============================

    12.당신은 특별히 가져 오기 및 내보내기 작동하도록 설계는 SQL 서버 통합 서비스 패키지를 사용할 수 있습니다.

    당신은 특별히 가져 오기 및 내보내기 작동하도록 설계는 SQL 서버 통합 서비스 패키지를 사용할 수 있습니다.

    VS는 완전히는 SQL 서버를 설치하면이 패키지를 개발하기위한 패키지를 가지고있다.

    비즈니스 인텔리전스 개발 Studio의 통합 서비스

  13. ==============================

    13.나는 애드혹 쿼리의 수도 생각 당신은 엑셀 파일에 결과를 내 보낸 다음 DataTable 개체로 해당 파일을 가져 오거나 사용을 그대로 다음 두 번째 데이터베이스로 엑셀 파일을 가져올 수 있습니다 이 링크를 보라 이 많이 U 도움이 될 수 있습니다.

    나는 애드혹 쿼리의 수도 생각 당신은 엑셀 파일에 결과를 내 보낸 다음 DataTable 개체로 해당 파일을 가져 오거나 사용을 그대로 다음 두 번째 데이터베이스로 엑셀 파일을 가져올 수 있습니다 이 링크를 보라 이 많이 U 도움이 될 수 있습니다.

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

  14. ==============================

    14.Oracle을 사용하여 (또는 SQL Server에 응용 프로그램을 구성)하는 경우 오라클 SQL Developer는 당신을 위해이 작업을 수행합니다. 테이블의 '언로드'을 선택하고 (모든 테이블이 물건을 만들하지 않으려면을 선택 취소 DDL)를 통해 옵션을 따릅니다.

    Oracle을 사용하여 (또는 SQL Server에 응용 프로그램을 구성)하는 경우 오라클 SQL Developer는 당신을 위해이 작업을 수행합니다. 테이블의 '언로드'을 선택하고 (모든 테이블이 물건을 만들하지 않으려면을 선택 취소 DDL)를 통해 옵션을 따릅니다.

  15. ==============================

    15.나는 무료이며, 무엇보다도 정확히이 일을이 SMSMS 부스트 부가 기능을 발견했다. 당신이 바로 결과를 클릭하고 스크립트 데이터를 선택할 수 있습니다.

    나는 무료이며, 무엇보다도 정확히이 일을이 SMSMS 부스트 부가 기능을 발견했다. 당신이 바로 결과를 클릭하고 스크립트 데이터를 선택할 수 있습니다.

  16. ==============================

    16.당신은 무료 및 오픈 소스이 Q2C.SSMSPlugin를 사용할 수 있습니다. 당신은 마우스 오른쪽 버튼을 클릭하고 "쿼리에 명령 ... 실행 -> 쿼리에 삽입 ..."를 선택할 수 있습니다. 즐겨)

    당신은 무료 및 오픈 소스이 Q2C.SSMSPlugin를 사용할 수 있습니다. 당신은 마우스 오른쪽 버튼을 클릭하고 "쿼리에 명령 ... 실행 -> 쿼리에 삽입 ..."를 선택할 수 있습니다. 즐겨)

  17. ==============================

    17.나는 다음과 같은 절차를 만들어 :

    나는 다음과 같은 절차를 만들어 :

    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;
    
  18. ==============================

    18.당신은 테이블에 선택 쿼리의 결과를 삽입하기 위해, INSERT INTO SELECT 문을 사용할 수 있습니다. http://www.w3schools.com/sql/sql_insert_into_select.asp

    당신은 테이블에 선택 쿼리의 결과를 삽입하기 위해, 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';
    
  19. from https://stackoverflow.com/questions/4526461/converting-select-results-into-insert-script-sql-server by cc-by-sa and MIT license