저장 프로세스를 통해 데이터 스크립트 생성

16701 단어 저장 프로세스
작업 수요에 따라 INSERT INTO TB(ID, COL)VALUES(1,'ABC')와 같은 데이터 스크립트 문구를 생성할 수도 있습니다.
며칠 전에 인터넷에서 봤던 관련 스크립트에 따라 이 기능을 실현할 수 있는 저장 과정을 다시 정리했습니다. 여러분이 사용해 보신 것을 환영합니다. 질문이나 버그가 있으면 저에게 메시지를 남겨주세요.
쓸데없는 말은 그만하고 코드를 말해라.
USE [test]

GO

/****** Object:  StoredProcedure [dbo].[pr_OutputData]    Script Date: 03/05/2015 15:41:47 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

-- =============================================

-- Author:        <Echo >

-- Create date: <2015-02-21>

-- Description:    <      >

-- =============================================

ALTER PROCEDURE [dbo].[pr_OutputData] 

    @TABLE VARCHAR(50),

    @TTYPE BIT = 0 --0:          

                   --1:     WHERE         1,                  WHERE  

AS

BEGIN



    SET NOCOUNT ON;

    

    IF OBJECT_ID(@TABLE) IS NULL

    BEGIN

        PRINT @TABLE+'    '

        RETURN

    END

    

    DECLARE @SQL1 VARCHAR(4000)

    DECLARE @TYPE INT

    DECLARE @COLUMN VARCHAR(2000)

    DECLARE @COLUMN_NAME VARCHAR(100)

    DECLARE @DATA VARCHAR(3000)

    SET @COLUMN = ''

    SET @COLUMN_NAME = ''

    SET @DATA = ''

    SET @SQL1 = ''



    DECLARE CUR CURSOR FOR SELECT NAME,USER_TYPE_ID FROM SYS.COLUMNS WHERE OBJECT_ID = OBJECT_ID(@TABLE) AND is_identity <> 1  --      

    OPEN CUR 

    FETCH NEXT FROM CUR INTO @COLUMN_NAME,@TYPE

    WHILE @@FETCH_STATUS=0

    BEGIN

    SET @COLUMN = @COLUMN+CASE WHEN LEN(@COLUMN)=0 THEN '' ELSE ','END + @COLUMN_NAME

    SET @DATA = @DATA +CASE WHEN LEN(@DATA)=0 THEN '' ELSE ','','','END +  

                CASE WHEN @TYPE IN(167,175) THEN '''''''''+'+@COLUMN_NAME+'+''''''''' --VARCHAR,CHAR

                     WHEN @TYPE IN(35,241) THEN '''''''''+CAST('+@COLUMN_NAME+' AS VARCHAR(MAX))+''''''''' --TEXT,XML

                     WHEN @TYPE IN(231,239) THEN '''N''''''+'+@COLUMN_NAME+'+''''''''' --NVARCHAR,NCHAR

                     WHEN @TYPE=61 THEN '''''''''+CONVERT(VARCHAR(23),'+@COLUMN_NAME+',121)+''''''''' --DATETIME

                     WHEN @TYPE=58 THEN '''''''''+CONVERT(VARCHAR(16),'+@COLUMN_NAME+',120)+''''''''' --SMALLDATETIME

                     WHEN @TYPE=36 THEN '''''''''+CONVERT(VARCHAR(36),'+@COLUMN_NAME+')+''''''''' --UNIQUEIDENTIFIER

                ELSE @COLUMN_NAME

                END

    FETCH NEXT FROM CUR INTO @COLUMN_NAME,@TYPE    

    END

    CLOSE CUR

    DEALLOCATE CUR

        

        --PRINT @COLUMN

        --PRINT @DATA

    SET @SQL1=' SELECT ''INSERT INTO '+@TABLE+'('+@COLUMN+') VALUES(''AS ''COL'','+@DATA+','')'' FROM '+@TABLE

    IF(@TTYPE = 0)

    BEGIN

        EXEC (@SQL1)

    END

    ELSE

    BEGIN

        PRINT @SQL1

    END 

END

이것은 설날에 쓴 것으로 비교적 간단하며, 자동 키 필터와where 조건 필터 기능만 추가했다.나중에 필요에 따라 수정하면 언제든지 최신 버전으로 올릴게요.

좋은 웹페이지 즐겨찾기