선택 결과를 삽입 스크립트로 변환-SQL Server [닫기]


106

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

Table1database1 에서 데이터를 선택해야 합니다. 그런 다음 결과와 insert values into Table1database2 의 일부 값을 편집해야 합니다.

아니면 다른 식으로 말하겠습니다.

한 테이블의 데이터를 insert script.


데이터베이스가 동일한 서버에 있습니까? 그렇다면 하나에서 다른 것으로 삽입 할 수 있습니다. database2.dbo.myTable에 삽입 database1.dbo.anOtherTable에서 데이터 선택
u07ch

예 두 데이터베이스가 동일한 서버에 있습니다. 하지만 스크립트가 필요합니다. 이 스크립트를 데이터베이스 담당자에게 줄 것입니다.
만화 캡틴

질문을 명확히하는 데 도움이 될 것입니다. 어떤 접근 방식이 작동합니까 아니면 dba에 전달할 수있는 삽입 스크립트가 필요합니까?
greg

답변:


31

SSMS Toolpack ( 맥주에서와 같이 무료 )에는 테이블에서 INSERT 문생성 하는 등 다양한 기능 이 있습니다.

업데이트 : SQL Server Management Studio 2012 (및 최신 버전)의 경우 SSMS 도구 팩은 더 이상 무료가 아니지만 적당한 라이선스 비용이 필요합니다.


+1 @marc_s 저는 T-SQL 생성기 스크립트를 풀고 이러한 삽입 스크립트를 생성하는 데 많은 작업을했으며 이제 도구가 있다고 말합니다.
bernd_k 2010

테이블이 데이터를 저장할 때주의하십시오 . 이러한 데이터 유형은 일반적으로 표시되거나 SSMS Toolpack에서 생성 된 스크립트보다 더 많은 소수 자릿수를 저장할 수 있습니다.
bernd_k

13
이것은 더 이상 무료가 아닙니다. ssmstoolspack.com/Licensing
greg

@Greg : 지적 해 주셔서 감사합니다. 참고 : 라이선스는 SQL Server Management Studio 2012 이상 에만 적용됩니다. 이전 버전의 경우 도구 팩은 여전히 ​​무료입니다.
marc_s

4
SSMS Toolpack의 대안 ?
Kiquenet

154

다음은 일부 상황에서 플러그인이나 외부 도구를 설치하는 것보다 더 쉬울 수있는 또 다른 방법입니다.

  • 를 수행합니다 .select [whatever you need]INTO temp.table_namefrom [... etc ...]
  • 개체 탐색기에서 데이터베이스를 마우스 오른쪽 버튼으로 클릭 => 작업 => 스크립트 생성
  • temp.table_name"개체 선택"화면에서 선택 하고 다음을 클릭합니다.
  • "스크립트 저장 방법 지정"화면에서 :
    • 고급을 클릭하고 "스크립트 할 데이터 유형"속성을 찾은 다음 "데이터 만"을 선택하고 고급 속성을 닫습니다.
    • "새 쿼리 창에 저장"을 선택합니다 (수천 개의 레코드가있는 경우 제외).
  • 다음을 클릭하고 작업이 완료 될 때까지 기다린 후 결과를 관찰하십시오. INSERT 문이 새 쿼리 창에 나타나는지 확인합니다.
  • 찾기 및 바꾸기를 사용하여 모두 변경 [temp.table_name][your_table_name].
  • drop table [temp.table_name].

INTO temp.table1을 사용하면 다음 오류가 생성됩니다. 지정된 스키마 이름 "temp"가 존재하지 않거나 사용할 권한이 없습니다. 저는 SQL 2012를 사용하고 있습니다.
Mark

3
temp여기서는 액세스 할 수있는 모든 스키마를 나타냅니다. 하나를 생성 ( create schema temp) 한 다음 완료되면 제거하거나 (더 나은) 현재 작업중인 스키마를 사용하면됩니다.
KT.

1
감사합니다. 방법이있을 줄 알았어요! 그건 그렇고, 스크립트하려는 테이블의 전체 데이터가 필요한 경우 임시 테이블 생성을 건너 뛸 수 있습니다.
FAB

이를 사용하여 Azure 데이터베이스로 데이터를 가져와야했습니다. 비 Azure 데이터베이스로 가져온 다음 SQL 삽입으로 추출하십시오.
m12lrpv

2
SSMS가 결과 집합에 '삽입 스크립트로 출력보기'기능을 추가하지 않았다는 사실이 여전히 놀랍습니다. 그러나 위의 접근 방식은 적절한 대량 삽입 (예 : 삽입 당 1,000 개 항목)을 수행하는 대신 개별 삽입 명령을 생성하지만 작동합니다. ) 그렇게해야합니다. 이건 정말 큰 결과 세트에서 실행되도록 영원히 걸릴 수 있습니다
Traderhut 게임을

60

SSMS에서 :

  • 데이터베이스> 작업> 스크립트 생성을 마우스 오른쪽 버튼으로 클릭합니다.

  • 다음

  • "특정 데이터베이스 개체 선택"을 선택하고 스크립팅 할 테이블을 확인하고 다음

  • Advanced >옵션 목록을 클릭 하고 아래로 스크롤하여 "스크립트로 작성할 데이터 유형"을 찾아 "데이터 전용"> 확인으로 변경합니다.

  • "새 쿼리 창에 저장"> 다음> 다음> 마침을 선택합니다.

이제 180 개의 모든 행이 180 개의 insert 문으로 작성되었습니다!


12
몇 개의 행에 유용합니다. 유용하지 않음 : 테이블에 20000 개의 행이 있고 20 개의 행에 대해 20 개의 삽입 만 원할 경우.
Kiquenet

2
@Kiquenet-먼저 원하는 20 개 행을 선택하는보기를 만든 다음 다음 단계에 따라보기를 기반으로 삽입 스크립트를 만들 수 있습니다. 그런 다음 대량 찾기 및 바꾸기를 수행하여 뷰 이름을 삽입해야하는 테이블 이름으로 다시 변경할 수 있습니다.
tember

@tember 당신이 말한 것처럼 View에서는 작동하지 않지만 Visual Studio에서는 작동합니다. 먼저 SQL Studio에서 필요한 선택 사항으로보기를 만든 다음 Visual Studio를 열고 SQL 서버에 연결하고 생성 된보기에서 스크립트를 생성합니다.
Sergii

그 정보에 감사드립니다. 전체 테이블을 버리는 것은 과잉이지만 내 문제를 해결했습니다.
paulz

생명의 은인. 평생 대본을 쓰고 있습니다.
Jay

38

기본 방법 :

예를 들어 테이블이있는 경우

Users(Id, name)

다음과 같이 할 수 있습니다.

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

이런 식으로 할 수 있지만 테이블이 몇 개 이상이면 약간의 입력이 필요합니다. Google에서 작성하고 찾을 수있는 sps가 있습니다. 또는 VS2012가있는 경우 VS가 대신 할 수 있습니다. 아래 내 대답을 참조하십시오.
greg

1
필드가 거의없는 테이블에 유용합니다. 테이블에 50, 60, 100 개의 열이 있으면 유용하지 않습니다. 더 나은 생성 SQL 코드
Kiquenet

23

1- 스크립트 설명

가) 테이블에 데이터를 삽입하는 구문은 다음과 같습니다.

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) 그런 다음 마지막으로 실행시 삽입 스크립트를 생성하는 최종 스크립트를 만들기 위해 위의 변수를 연결했습니다.

이자형)

@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

나는) 그리고 sp_generate_insertscripts 같은 sp 를 만들었습니다.

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

당신은 ... 놀라운 일을
DineshDB

14

Visual Studio 를 통해 가능합니다. SQL Server 개체 탐색기 .

필요한 테이블을 보려면 컨텍스트 메뉴에서 "데이터보기"를 클릭하고 결과를 필터링하고 결과를 스크립트로 저장할 수 있습니다.


1
귀하의 게시물은 Visual Studio에서 SQL Server 데이터 도구를 사용하는 정확하고 가장 쉬운 방법입니다. 여기여기 에 처음 1000 행 희망에 대한 insert 문 생성 방법을 설명하는 게시물 이 있습니다.
shaijut nov.

8

Visual Studio를 사용하여 다음을 수행하십시오.

SQL Server-> SQL Server 데이터베이스 프로젝트 유형의 프로젝트 만들기

SQL Server 탐색기 CTL- \, CTL-S를 엽니 다.

SQL SERVER 아이콘을 마우스 오른쪽 버튼으로 클릭하여 SQL Server를 추가합니다. Selcet 새 서버 추가

관심있는 테이블로 이동

오른쪽 클릭-> 데이터보기

왼쪽 상단 셀을 클릭하여 모든 것을 강조 표시합니다 (ctl-A가 작동하지 않는 것 같습니다).

오른쪽 클릭-> SCript

이것은 훌륭합니다. 나는 수년에 걸쳐 위에 나열된 모든 것을 시도했습니다. 나는 이것을 할 수있는 도구가 있다는 것을 알고 있으며 훨씬 더 많은 이름을 생각할 수 없습니다. 그러나 그것은 매우 비싸다.

행운을 빕니다. 나는 이것을 알아 냈다. 텍스트 필드 등으로 광범위하게 테스트하지는 않았지만 길을 먼 길로 인도하는 것처럼 보입니다.

그렉


1
이것은 선택된 결과를 변환하는 것이 아니라 단순히 테이블을 스크립팅합니다.
에릭 K

@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 ')
greg

이것은 임시 테이블 생성과 함께 나를 위해 해주었습니다.
hr-tis

4

into 문을 사용하여 별도의 테이블 만들기 예를 들어

[dbo]. [Employee]에서 Test_123에 *를 선택하십시오. 여기서 Name like '% Test %'

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

SQL이 스크립트를 생성합니다.


3

SSMS에서 'Result to File'옵션을 선택하고 선택한 결과를 파일로 내보내고 결과 파일을 변경 한 다음 마지막으로 BCP-Bulk copy를 사용하여 데이터베이스 2의 표 1에 삽입 할 수 있습니다.

대량 삽입의 경우 .rpt 파일을 .csv 파일로 변환해야한다고 생각합니다.

도움이되기를 바랍니다.


2

비슷한 문제가 있었지만 쿼리 (필터 등)에서 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을 사용하면 초가 손실됩니다.


2

이것은보다 다재다능한 솔루션 (질문이 묻는 것보다 조금 더 많은 일을 할 수 있음)이며, 새로운 저장 프로 시저를 만들지 않고도 쿼리 창에서 사용할 수 있습니다. 쓰기 액세스 권한이없는 프로덕션 데이터베이스에서 유용합니다. .

코드를 사용하려면 사용법을 설명하는 인라인 주석에 따라 수정하십시오. 그런 다음 쿼리 창에서이 쿼리를 실행하면 필요한 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



1

다음을 만들었습니다 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'로 잘 렸습니다
Adam Mendoza

0

Oracle을 사용하는 경우 (또는 SQL Server에 응용 프로그램을 구성하는 경우) Oracle SQL Developer가이 작업을 수행합니다. 테이블에 대해 '언로드'를 선택하고 옵션을 따르십시오 (모든 테이블이 항목을 생성하지 않으려면 DDL을 선택 취소하십시오).


1
이 명확하게 ...는 SQL 서버 문제로 표시됩니다
BentOnCoding

SQL Server와 함께 Oracle SQL Developer를 사용할 수도 있습니다. 내 응답을 수정했습니다.
Liam '

0

나는이 SMSMS Boost 애드온을 찾았 는데 , 이것은 무료이며 다른 것들 중에서도 정확하게 이것을 수행합니다. 결과를 마우스 오른쪽 버튼으로 클릭하고 데이터 스크립트를 선택할 수 있습니다.


내가보기 스크립트 그리드 데이터를 하지만 결과에서 SQL 삽입 생성하지
Kiquenet

0

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


SSMS 2012에 유효합니까?
Kiquenet

-1

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';

1
이것은 INSERT 문으로 변환하는 SELECT 문의 결과와 관련이 없습니다. 이것은 단순한 INSERT 문입니다.
Niels Lucas

기능적으로 동일하지 않습니까?
수호자 1
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.