복붙노트

[SQL] 어떻게 삽입 SQL 형식으로 테이블의 모든 데이터를 내보낼?

SQL

어떻게 삽입 SQL 형식으로 테이블의 모든 데이터를 내보낼?

나는 데이터베이스에서 테이블 (A_table 호출)가 Microsoft SQL Server 관리 Studio에서 (A_db 호출), 10 개 행이 있습니다.

나는 다른 데이터베이스를 (그것을 B_db 전화), 그리고 그것은 A_table가이 같은 열 설정을 가진 테이블 (B_table를 호출)이있다. 그러나 B_table가 비어 있습니다.

내가 원하는 것은 :

테이블에서 삽입 SQL을 생성하는 마이크로 소프트 SQL Server 관리 Studio 2012에서 어떤 옵션이 있습니까? 또는 그렇게 할 수있는 다른 옵션이 있습니다?

해결법

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

    1.빠르고 쉬운 방법 :

    빠르고 쉬운 방법 :

    나는 보통 이런 경우에서 새 쿼리 편집기 창을 생성 한 후 단지 필요한 수정을한다.

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

    2.나는이 오래된 질문 알아요,하지만 하나 개의 테이블에서 다른 복사 데이터에 대한 다른 옵션이있는 경우 빅토리 오도 물었다. 모두에게 (또는 이와 유사한 디자인을 가지고 있지 않을 수도 있습니다) 다른 한 테이블에서 레코드를 삽입 할 수있는 매우 짧고 빠른 방법이있다.

    나는이 오래된 질문 알아요,하지만 하나 개의 테이블에서 다른 복사 데이터에 대한 다른 옵션이있는 경우 빅토리 오도 물었다. 모두에게 (또는 이와 유사한 디자인을 가지고 있지 않을 수도 있습니다) 다른 한 테이블에서 레코드를 삽입 할 수있는 매우 짧고 빠른 방법이있다.

    당신은 테이블 B 테이블에 ID 열이없는 경우 :

    INSERT INTO A_db.dbo.A_table
    SELECT * FROM B_db.dbo.B_table
    

    당신이 테이블 B_table에 ID 열이있는 경우, 당신은 삽입 할 열을 지정해야합니다. 기본적으로 당신은 기본적으로 증가 자동 될 것 ID 열을 제외하고 모두를 선택합니다.

    혹시 BDB 기존 테이블이없는 경우

    SELECT *
    INTO B_db.dbo.B_table
    FROM A_db.dbo.A_table
    

    기존의 모든 값을 데이터베이스 B_db 테이블 B_table을 만듭니다

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

    3.DumpDataFromTable sproc에 의해 테이블에서 파일로 데이터를 덤프하는 또 다른 방법

    DumpDataFromTable sproc에 의해 테이블에서 파일로 데이터를 덤프하는 또 다른 방법

    EXEC dbo.DumpDataFromTable
         @SchemaName = 'dbo'
        ,@TableName = 'YourTableName'
        ,@PathOut = N'c:\tmp\scripts\' -- folder must exist !!!'
    

    참고 : 설정하지 다음 간부 후속 라인 번 경우 SQL은 파일을 만들 수있는 권한이 있어야합니다

    EXEC sp_configure 'Ole Automation Procedures', 1; RECONFIGURE WITH OVERRIDE;
    

    이 스크립트에 의해 당신은 sproc에 호출 할 수 DumpDataFromTable.sql을 대신 관리 Studio에서 하나가 수동으로 하나의 일을, 한 번에 많은 테이블을 덤프

    기본적으로 생성 된 서류의 형식 등이 될 것입니다

    INSERT INTO <TableName> SELECT <Values>
    

    또는 당신은에 생성 된 형식을 변경할 수 있습니다

    SELECT ... FROM
    

    설정 변수가 @BuildMethod = 2

    전체의 sproc 코드 :

    IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[DumpDataFromTable]') AND type in (N'P', N'PC'))
        DROP PROCEDURE dbo.[DumpDataFromTable]
    GO
    
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    
    -- =============================================
    -- Author:    Oleg Ciobanu
    -- Create date: 20171214
    -- Version 1.02
    -- Description:
    -- dump data in 2 formats
    -- @BuildMethod = 1 INSERT INTO format
    -- @BuildMethod = 2 SELECT * FROM format
    --
    -- SQL must have permission to create files, if is not set-up then exec follow line once
    -- EXEC sp_configure 'Ole Automation Procedures', 1; RECONFIGURE WITH OVERRIDE;
    --
    -- =============================================
    CREATE PROCEDURE [dbo].[DumpDataFromTable]
    (
         @SchemaName nvarchar(128) --= 'dbo'
        ,@TableName nvarchar(128) --= 'testTable'
        ,@WhereClause nvarchar (1000) = '' -- must start with AND
        ,@BuildMethod int = 1 -- taking values 1 for INSERT INTO forrmat or 2 for SELECT from value Table
        ,@PathOut nvarchar(250) = N'c:\tmp\scripts\' -- folder must exist !!!'
        ,@AsFileNAme nvarchar(250) = NULL -- if is passed then will use this value as FileName
        ,@DebugMode int = 0
    )
    AS
    BEGIN  
        SET NOCOUNT ON;
    
            -- run follow next line if you get permission deny  for sp_OACreate,sp_OAMethod
            -- EXEC sp_configure 'Ole Automation Procedures', 1; RECONFIGURE WITH OVERRIDE;
    
        DECLARE @Sql nvarchar (max)
        DECLARE @SqlInsert nvarchar (max) = ''
        DECLARE @Columns nvarchar(max)
        DECLARE @ColumnsCast nvarchar(max)
    
        -- cleanUp/prepraring data
        SET @SchemaName = REPLACE(REPLACE(@SchemaName,'[',''),']','')
        SET @TableName = REPLACE(REPLACE(@TableName,'[',''),']','')
        SET @AsFileNAme = NULLIF(@AsFileNAme,'')
        SET @AsFileNAme = REPLACE(@AsFileNAme,'.','_')
        SET @AsFileNAme = COALESCE(@PathOut + @AsFileNAme + '.sql', @PathOut + @SchemaName + ISNULL('_' + @TableName,N'') + '.sql')
    
    
        --debug
        IF @DebugMode = 1
            PRINT @AsFileNAme
    
            -- Create temp SP what will be responsable for generating script files
        DECLARE @PRC_WritereadFile VARCHAR(max) =
            'IF EXISTS (SELECT * FROM sys.objects WHERE type = ''P'' AND name = ''PRC_WritereadFile'')
           BEGIN
              DROP  Procedure  PRC_WritereadFile
           END;'
        EXEC  (@PRC_WritereadFile)
           -- '  
        SET @PRC_WritereadFile =
        'CREATE Procedure PRC_WritereadFile (
            @FileMode INT -- Recreate = 0 or Append Mode 1
           ,@Path NVARCHAR(1000)
           ,@AsFileNAme NVARCHAR(500)
           ,@FileBody NVARCHAR(MAX)   
           )
        AS
            DECLARE @OLEResult INT
            DECLARE @FS INT
            DECLARE @FileID INT
            DECLARE @hr INT
            DECLARE @FullFileName NVARCHAR(1500) = @Path + @AsFileNAme
    
            -- Create Object
            EXECUTE @OLEResult = sp_OACreate ''Scripting.FileSystemObject'', @FS OUTPUT
            IF @OLEResult <> 0 BEGIN
                PRINT ''Scripting.FileSystemObject''
                GOTO Error_Handler
            END    
    
            IF @FileMode = 0 BEGIN  -- Create
                EXECUTE @OLEResult = sp_OAMethod @FS,''CreateTextFile'',@FileID OUTPUT, @FullFileName
                IF @OLEResult <> 0 BEGIN
                    PRINT ''CreateTextFile''
                    GOTO Error_Handler
                END
            END ELSE BEGIN          -- Append
                EXECUTE @OLEResult = sp_OAMethod @FS,''OpenTextFile'',@FileID OUTPUT, @FullFileName, 8, 0 -- 8- forappending
                IF @OLEResult <> 0 BEGIN
                    PRINT ''OpenTextFile''
                    GOTO Error_Handler
                END            
            END
    
            EXECUTE @OLEResult = sp_OAMethod @FileID, ''WriteLine'', NULL, @FileBody
            IF @OLEResult <> 0 BEGIN
                PRINT ''WriteLine''
                GOTO Error_Handler
            END     
    
            EXECUTE @OLEResult = sp_OAMethod @FileID,''Close''
            IF @OLEResult <> 0 BEGIN
                PRINT ''Close''
                GOTO Error_Handler
            END
    
            EXECUTE sp_OADestroy @FS
            EXECUTE sp_OADestroy @FileID
    
            GOTO Done
    
            Error_Handler:
                DECLARE @source varchar(30), @desc varchar (200)       
                EXEC @hr = sp_OAGetErrorInfo null, @source OUT, @desc OUT
                PRINT ''*** ERROR ***''
                SELECT OLEResult = @OLEResult, hr = CONVERT (binary(4), @hr), source = @source, description = @desc
    
           Done:
        ';
            -- '
        EXEC  (@PRC_WritereadFile) 
        EXEC PRC_WritereadFile 0 /*Create*/, '', @AsFileNAme, ''
    
    
        ;WITH steColumns AS (
            SELECT
                1 as rn,
                c.ORDINAL_POSITION
                ,c.COLUMN_NAME as ColumnName
                ,c.DATA_TYPE as ColumnType
            FROM INFORMATION_SCHEMA.COLUMNS c
            WHERE 1 = 1
            AND c.TABLE_SCHEMA = @SchemaName
            AND c.TABLE_NAME = @TableName
        )
    
        --SELECT *
    
           SELECT
                @ColumnsCast = ( SELECT
                                        CASE WHEN ColumnType IN ('date','time','datetime2','datetimeoffset','smalldatetime','datetime','timestamp')
                                            THEN
                                                'convert(nvarchar(1001), s.[' + ColumnName + ']' + ' , 121) AS [' + ColumnName + '],'
                                                --,convert(nvarchar, [DateTimeScriptApplied], 121) as [DateTimeScriptApplied]
                                            ELSE
                                                'CAST(s.[' + ColumnName + ']' + ' AS NVARCHAR(1001)) AS [' + ColumnName + '],'
                                        END
                                         as 'data()'                                  
                                        FROM
                                          steColumns t2
                                        WHERE 1 =1
                                          AND t1.rn = t2.rn
                                        FOR xml PATH('')
                                       )
                ,@Columns = ( SELECT
                                        '[' + ColumnName + '],' as 'data()'                                  
                                        FROM
                                          steColumns t2
                                        WHERE 1 =1
                                          AND t1.rn = t2.rn
                                        FOR xml PATH('')
                                       )
    
        FROM steColumns t1
    
        -- remove last char
        IF lEN(@Columns) > 0 BEGIN
            SET @Columns = SUBSTRING(@Columns, 1, LEN(@Columns)-1);
            SET @ColumnsCast = SUBSTRING(@ColumnsCast, 1, LEN(@ColumnsCast)-1);
        END
    
        -- debug
        IF @DebugMode = 1 BEGIN
            print @ColumnsCast
            print @Columns
            select @ColumnsCast ,  @Columns
        END
    
        -- build unpivoted Data
        SET @SQL = '
        SELECT
            u.rn
            , c.ORDINAL_POSITION as ColumnPosition
            , c.DATA_TYPE as ColumnType
            , u.ColumnName
            , u.ColumnValue
        FROM
        (SELECT
            ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rn,
        '
        + CHAR(13) + @ColumnsCast
        + CHAR(13) + 'FROM [' + @SchemaName + '].[' + @TableName + '] s'
        + CHAR(13) + 'WHERE 1 = 1'
        + CHAR(13) + COALESCE(@WhereClause,'')
        + CHAR(13) + ') tt
        UNPIVOT
        (
          ColumnValue
          FOR ColumnName in (
        ' + CHAR(13) + @Columns
        + CHAR(13)
        + '
         )
        ) u
    
        LEFT JOIN INFORMATION_SCHEMA.COLUMNS c ON c.COLUMN_NAME = u.ColumnName
            AND c.TABLE_SCHEMA = '''+ @SchemaName + '''
            AND c.TABLE_NAME = ''' + @TableName +'''
        ORDER BY u.rn
                , c.ORDINAL_POSITION
        '
    
        -- debug
        IF @DebugMode = 1 BEGIN
            print @Sql     
            exec (@Sql)
        END
    
        -- prepare data for cursor
    
        IF OBJECT_ID('tempdb..#tmp') IS NOT NULL
            DROP TABLE #tmp
        CREATE TABLE #tmp
        (
            rn bigint
            ,ColumnPosition int
            ,ColumnType varchar (128)
            ,ColumnName varchar (128)
            ,ColumnValue nvarchar (2000) -- I hope this size will be enough for storring values
        )
        SET @Sql = 'INSERT INTO  #tmp ' + CHAR(13)  + @Sql
    
        -- debug
        IF @DebugMode = 1 BEGIN
            print @Sql
        END
    
        EXEC (@Sql)
    
     -- Insert dummy rec, otherwise will not proceed the last rec :)
    INSERT INTO #tmp (rn)
    SELECT MAX(rn) +  1 
    FROM #tmp   
    
        IF @DebugMode = 1 BEGIN
            SELECT * FROM #tmp
        END
    
        DECLARE @rn bigint
            ,@ColumnPosition int
            ,@ColumnType varchar (128)
            ,@ColumnName varchar (128)
            ,@ColumnValue nvarchar (2000)
            ,@i int = -1 -- counter/flag
            ,@ColumnsInsert varchar(max) = NULL
            ,@ValuesInsert nvarchar(max) = NULL
    
        DECLARE cur CURSOR FOR
        SELECT rn, ColumnPosition, ColumnType, ColumnName, ColumnValue
        FROM #tmp
        ORDER BY rn, ColumnPosition -- note order is really important !!!
        OPEN cur
    
        FETCH NEXT FROM cur
        INTO @rn, @ColumnPosition, @ColumnType, @ColumnName, @ColumnValue
    
        IF @BuildMethod = 1
        BEGIN
            SET @SqlInsert = 'SET NOCOUNT ON;' + CHAR(13);
            EXEC PRC_WritereadFile 1 /*Add*/, '', @AsFileName, @SqlInsert
            SET @SqlInsert = ''
        END
        ELSE BEGIN
            SET @SqlInsert = 'SET NOCOUNT ON;' + CHAR(13);
            SET @SqlInsert = @SqlInsert
                            + 'SELECT *'
                            + CHAR(13) + 'FROM ('
                            + CHAR(13) + 'VALUES'
            EXEC PRC_WritereadFile 1 /*Add*/, '', @AsFileName, @SqlInsert
            SET @SqlInsert = NULL
        END
    
        SET @i = @rn
    
        WHILE @@FETCH_STATUS = 0
        BEGIN
    
            IF (@i <> @rn) -- is a new row
            BEGIN
                IF @BuildMethod = 1
                -- build as INSERT INTO -- as Default
                BEGIN
                    SET @SqlInsert = 'INSERT INTO [' + @SchemaName + '].[' + @TableName + '] ('
                                    + CHAR(13) + @ColumnsInsert + ')'
                                    + CHAR(13) + 'VALUES ('
                                    + @ValuesInsert
                                    + CHAR(13) + ');'
                END
                ELSE
                BEGIN
                    -- build as Table select
                    IF (@i <> @rn) -- is a new row
                    BEGIN
                        SET @SqlInsert = COALESCE(@SqlInsert + ',','') +  '(' + @ValuesInsert+ ')'
                        EXEC PRC_WritereadFile 1 /*Add*/, '', @AsFileNAme, @SqlInsert
                        SET @SqlInsert = '' -- in method 2 we should clear script
                    END            
                END
                -- debug
                IF @DebugMode = 1
                    print @SqlInsert
                EXEC PRC_WritereadFile 1 /*Add*/, '', @AsFileNAme, @SqlInsert
    
                -- we have new row
                -- initialise variables
                SET @i = @rn
                SET @ColumnsInsert = NULL
                SET @ValuesInsert = NULL
            END
    
            -- build insert values
            IF (@i = @rn) -- is same row
            BEGIN
                SET @ColumnsInsert = COALESCE(@ColumnsInsert + ',','') + '[' + @ColumnName + ']'
                SET @ValuesInsert =  CASE                              
                                        -- date
                                        --WHEN
                                        --  @ColumnType IN ('date','time','datetime2','datetimeoffset','smalldatetime','datetime','timestamp')
                                        --THEN
                                        --  COALESCE(@ValuesInsert + ',','') + '''''' + ISNULL(RTRIM(@ColumnValue),'NULL') + ''''''
                                        -- numeric
                                        WHEN
                                            @ColumnType IN ('bit','tinyint','smallint','int','bigint'
                                                            ,'money','real','','float','decimal','numeric','smallmoney')
                                        THEN
                                            COALESCE(@ValuesInsert + ',','') + '' + ISNULL(RTRIM(@ColumnValue),'NULL') + ''
                                        -- other types treat as string
                                        ELSE
                                            COALESCE(@ValuesInsert + ',','') + '''' + ISNULL(RTRIM( 
                                                                                                -- escape single quote
                                                                                                REPLACE(@ColumnValue, '''', '''''') 
                                                                                                  ),'NULL') + ''''         
                                    END
            END
    
    
            FETCH NEXT FROM cur
            INTO @rn, @ColumnPosition, @ColumnType, @ColumnName, @ColumnValue
    
            -- debug
            IF @DebugMode = 1
            BEGIN
                print CAST(@rn AS VARCHAR) + '-' + CAST(@ColumnPosition AS VARCHAR)
            END
        END
        CLOSE cur
        DEALLOCATE cur
    
        IF @BuildMethod = 1
        BEGIN
            PRINT 'ignore'
        END
        ELSE BEGIN
            SET @SqlInsert = CHAR(13) + ') AS vtable '
                            + CHAR(13) + ' (' + @Columns
                            + CHAR(13) + ')'
            EXEC PRC_WritereadFile 1 /*Add*/, '', @AsFileNAme, @SqlInsert
            SET @SqlInsert = NULL
        END
        PRINT 'Done: ' + @AsFileNAme
    END
    

    또는 https://github.com/Zindur/MSSQL-DumpTable/tree/master/Scripts에서 최신 버전을 다운로드 할 수 있습니다

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

    4.명령 리눅스 시스템 터미널에서 데이터베이스 백업을 얻을 수 있습니다.

    명령 리눅스 시스템 터미널에서 데이터베이스 백업을 얻을 수 있습니다.

    sqlcmd -S localhost -U SA -Q "BACKUP DATABASE [demodb] TO DISK = N'/var/opt/mssql/data/demodb.bak' WITH NOFORMAT, NOINIT, NAME = 'demodb-full', SKIP, NOREWIND, NOUNLOAD, STATS = 10"
    

    누군가가 도움이되기를 바랍니다.

  5. ==============================

    5.우리는 다른 테이블에 하나 개의 테이블 데이터를 덤프 쿼리 아래 사용해야합니다.

    우리는 다른 테이블에 하나 개의 테이블 데이터를 덤프 쿼리 아래 사용해야합니다.

    Select * into SampleProductTracking_tableDump
    from SampleProductTracking;
    

    SampleProductTracking_tableDump가 자동으로 생성됩니다 새 테이블입니다 위의 쿼리를 사용하는 경우. 그것은 SampleProductTracking_tableDump에 SampleProductTracking에서 레코드를 복사합니다

  6. ==============================

    6.나는 Microsoft SQL Server 관리 Studio에서 어떤 옵션을 보지 못했다 2012 - 날짜 그렇게 할 것입니다.

    나는 Microsoft SQL Server 관리 Studio에서 어떤 옵션을 보지 못했다 2012 - 날짜 그렇게 할 것입니다.

    난 당신이 시간을 주어 T-SQL에서 뭔가를 쓸 수 있습니다 확신합니다.

    QUEST에서 두꺼비를 체크 아웃 - 지금 DELL 소유.

    http://www.toadworld.com/products/toad-for-oracle/f/10/t/9778.aspx

    Select your rows.
    Rt -click -> Export Dataset.
    Choose Insert Statement format
    Be sure to check “selected rows only”
    

    두꺼비에 대한 좋은 점은, 그것은 모두 SQL 서버와 오라클와 함께 작동합니다. 당신이 모두 일을해야하는 경우, 그것은 좋은 투자입니다.

  7. from https://stackoverflow.com/questions/20542819/how-to-export-all-data-from-table-to-an-insertable-sql-format by cc-by-sa and MIT license