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)
  • 相关阅读:
    linux命令
    牛顿法|阻尼牛顿法|拟牛顿法|DFP算法|BFGS算法|L-BFGS算法
    借One-Class-SVM回顾SMO在SVM中的数学推导--记录毕业论文5
    【转】白话经典算法系列之七 堆与堆排序
    volatie关键字
    【转】从输入网址到显示网页的全过程分析
    CSS和HTML的一些事
    JavaScript笔记梳理
    形状文法--建筑风格分类总结
    Baidu ECharts知识梳理
  • 原文地址:https://www.cnblogs.com/EasonWu/p/1142780.html
Copyright © 2011-2022 走看看