zoukankan      html  css  js  c++  java
  • 转:一段有用的SQL代码

    其功能是:将表中的数据生成SQL脚本,在查询分析器中执行这些脚本后自动将数据导入到SQL Server中

    -- =============================================
    -- Author:      佚名
    -- Description: 将表中的数据转换成Insert语句的集
    --              合的通用存储过程
    -- =============================================
    CREATE PROCEDURE  sp_ConvertDataToInsertSql
        @tablename   sysname   -- source table name
    AS
    BEGIN
        DECLARE   @column   varchar(1000)
        DECLARE   @columndata   varchar(1000)
        DECLARE   @sql   varchar(4000)
        DECLARE   @xtype   tinyint
        DECLARE   @name   sysname
        DECLARE   @objectId   int
        DECLARE   @objectname   sysname
        DECLARE   @ident   int
    
        SET NOCOUNT ON
    
        SET @objectId=object_id(@tablename)
        -- 判断对象是否存在
        IF @objectId IS NULL
        BEGIN
            print  @tablename +  '对象不存在'
            RETURN
        END
    
        SET @objectname=RTRIM(object_name(@objectId))
        IF @objectname IS NULL OR CHARINDEX(@objectname,@tablename) = 0
        BEGIN
            print  @tablename +  '对象不在当前数据库中'     
            RETURN
        END
        --判断对象是否是表
        IF OBJECTPROPERTY(@objectId,'IsTable') <> 1
        BEGIN
            print @tablename + '对象不是表'
            RETURN
        END
    
        SELECT @ident=status&0x80
          FROM syscolumns
         WHERE id=@objectid
           AND status&0x80=0x80
        IF @ident IS NOT NULL
            PRINT 'SET   IDENTITY_INSERT   '+ @TableName + '   ON'
    
        --定义游标,循环取数据并生成Insert语句
        DECLARE syscolumns_cursor CURSOR FOR
            SELECT c.name,c.xtype FROM syscolumns c
             WHERE c.id=@objectid
             ORDER BY c.colid
        --打开游标
        open syscolumns_cursor
        SET @column=''
        SET @columndata=''
        FETCH NEXT FROM syscolumns_cursor INTO @name, @xtype
        WHILE @@fetch_status <> -1
        BEGIN
            IF @@fetch_status <> -2
            BEGIN 
                --timestamp不需处理,image,text,ntext,sql_variant 暂时不处理
                IF @xtype NOT IN(189,34,35,99,98)
                    BEGIN
                    SET @column=@column +
                        CASE WHEN len(@column)=0 THEN '' ELSE ',' END + @name
                    SET @columndata = @columndata +
                        CASE WHEN len(@columndata)=0 THEN '' ELSE ','','',' END +
                        CASE WHEN @xtype IN(167,175) THEN '''''''''+' + @name+'+'''''''''   --varchar,char
                             WHEN @xtype IN(231,239) THEN '''N''''''+' + @name+'+'''''''''   --nvarchar,nchar
                             WHEN @xtype=61 THEN '''''''''+convert(char(23),' + @name+',121)+'''''''''   --datetime
                             WHEN @xtype=58 THEN '''''''''+convert(char(16),' + @name+',120)+'''''''''   --smalldatetime
                             WHEN @xtype=36 THEN '''''''''+convert(char(36),' + @name+')+'''''''''   --uniqueidentifier
                             ELSE @name
                    END
                END
            END
            FETCH NEXT FROM syscolumns_cursor INTO @name,@xtype
        END
        -- 关闭游标
        CLOSE   syscolumns_cursor
        DEALLOCATE   syscolumns_cursor
    
        SET @sql = 'SET NOCOUNT ON SELECT ''INSERT '
            + @tablename + '(' + @column + ') VALUES(''as ''--'','
            + @columndata + ','')'' FROM ' + @tablename
        PRINT '--'+@sql
    
        EXEC(@sql)
        IF @ident IS NOT NULL
            PRINT 'SET IDENTITY_INSERT '+@TableName+' OFF'
    END

    调用存储过程:

    EXEC sp_ConvertDataToInsertSql 'persons' 

    得到的结果集类似下面的数据:

    INSERT persons(username,lastname,firstname,city,id) VALUES('Bill','Bill','Zheng','Xuzhou',1)
  • 相关阅读:
    第一周博客作业(学习历程和感想)
    WordCount 基础功能
    MyBatis 分页插件 PageHelper 使用
    手机尾号猜年龄骗局解密
    逻辑思维题一
    给div添加滚动条
    my97中文乱码问题
    cookie中文乱码
    多线程下的单例模式
    HTML5的入门与深入理解
  • 原文地址:https://www.cnblogs.com/EasonWu/p/1142780.html
Copyright © 2011-2022 走看看