sql表转mysql语句

DECLARE 
    @tabName VARCHAR(50),
    @tabDes VARCHAR(50),
    
    
    -- 内层游标变量(字段信息)
    @colName VARCHAR(50),
    @colType VARCHAR(50),
    @colLen int,
    @colIsNull int,
    @colDes VARCHAR(200),
    @colStr varchar(MAX)='';

-- 声明游标
DECLARE tab_cursor CURSOR FOR
    SELECT DISTINCT
    d.name,
    f.value 
FROM
    syscolumns a
    LEFT JOIN systypes b ON a.xusertype= b.xusertype
    INNER JOIN sysobjects d ON a.id= d.id 
    AND d.xtype= 'U' 
    AND d.name<> 'dtproperties'
    LEFT JOIN syscomments e ON a.cdefault= e.id
    LEFT JOIN sys.extended_properties g ON a.id= G.major_id 
    AND a.colid= g.minor_id
    LEFT JOIN sys.extended_properties f ON d.id= f.major_id 
    AND f.minor_id= 0;

-- 打开游标
OPEN tab_cursor;

-- 获取第一行数据
FETCH NEXT FROM tab_cursor INTO @tabName, @tabDes;

-- 循环读取游标数据
WHILE @@FETCH_STATUS = 0
BEGIN
--     select @tabName,@tabDes
   -- PRINT '信息:' +@tabName + ',' + ISNULL(@tabDes, '');
    
         --初始化字段
        set @colStr=''
        
        set @colStr=@colStr+''
        set @colStr=@colStr+'CREATE TABLE '+@tabName+'('+ CHAR(13) + CHAR(10)
        
        
    SELECT   CAST(a.name AS VARCHAR(200)) as name,
    CAST(b.name AS VARCHAR(200))  as type,
    CAST(COLUMNPROPERTY(a.id,a.name,'PRECISION')  AS INT) as len,
     (a.isnullable) as colisnull,
     CAST( isnull(g.[value],'') AS VARCHAR(200)) as des
    into #colTab
FROM 
    syscolumns a
left join 
    systypes b 
on 
    a.xusertype=b.xusertype
inner join 
    sysobjects d 
on 
    a.id=d.id  and d.xtype='U' and  d.name<>'dtproperties'
left join 
    syscomments e 
on 
    a.cdefault=e.id
left join 
sys.extended_properties   g 
on 
    a.id=G.major_id and a.colid=g.minor_id  
left join
sys.extended_properties f
on 
    d.id=f.major_id and f.minor_id=0
where 
    d.name=@tabName
order by 
    a.id,a.colorder
    
    
    -- 2. 定义内层游标(遍历当前客户的订单)
    DECLARE Inner_Cursor CURSOR FOR
    select * from  #colTab
    
    -- 打开内层游标
    OPEN Inner_Cursor;

    -- 获取内层游标第一行数据
    FETCH NEXT FROM Inner_Cursor INTO @colName, @colType,@colLen,@colIsnull, @colDes;

    -- 内层游标循环
    WHILE @@FETCH_STATUS = 0
    BEGIN
        -- 输出字段信息
        --PRINT '字段信息:'+ @colName+','+ @colType+','+@colLen+','+@colDes;
          if(@colName!='aysnId' AND @colName!='id') 
          BEGIN
            set @colStr=@colStr+','
          END
         
        set @colStr=@colStr+@colName+'  '
        
        --判断字段类型
        if(@colType='nvarchar') 
          BEGIN
            if(@colLen>800)
              BEGIN 
                set @colStr=@colStr+' longtxt'
               END
            ELSE
              BEGIN 
                set @colStr=@colStr+' varchar('+ CAST(@colLen as VARCHAR)+')'
               END
          END
        else if(@colType='money') 
          BEGIN
            set @colStr=@colStr+' decimal(18,10)'
          END
        else 
          BEGIN
           set @colStr=@colStr+' '+@colType
          END
          
          --主键判断
          if(@colName='aysnId' or @colName='id') 
          BEGIN
            set @colStr=@colStr+' UNSIGNED '
          END
          
          --非空判断
          if(@colIsnull=1)
            BEGIN
              set @colStr=@colStr+' Null'
            END
          ELSE 
           BEGIN
              set @colStr=@colStr+' Not Null'
            END
          
          
          --主键判断
        if(@colName='aysnId' or @colName='id') 
          BEGIN
            set @colStr=@colStr+' AUTO_INCREMENT PRIMARY KEY '
          END
          
        set @colStr=@colStr+' COMMENT "'+@colDes+'"'+ CHAR(13) + CHAR(10)
        

        --获取内层游标下一行数据
        FETCH NEXT FROM Inner_Cursor INTO @colName, @colType,@colLen,@colIsnull, @colDes;

    END;

    -- 关闭并释放内层游标(必须在每次外层循环结束后释放)
    CLOSE Inner_Cursor;
    DEALLOCATE Inner_Cursor;
    
        DROP TABLE  #colTab
        set @colStr=@colStr+')ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;'+ CHAR(13) + CHAR(10)
    
        PRINT @colStr
    
    -- 获取下一行数据
    FETCH NEXT FROM tab_cursor INTO @tabName, @tabDes;
END;

-- 关闭并释放游标
CLOSE tab_cursor;
DEALLOCATE tab_cursor;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

acycwf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值