<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qileilove

    blog已經轉移至github,大家請訪問 http://qaseven.github.io/

    SQL Server 動態生成數據庫所有表Insert語句

      一、 背景
      SQL Server,如果我們需要把數據庫A的所有表數據到數據庫B中,通常我們會怎么做呢?我會使用SSMS的導入導出功能,進行表數據的導入導出,無可厚非,這樣的導入非常簡單和方便;
      但是,當我們的表有上百個,而且有些表是有自增ID的,那么這個時候使用SSMS的話,你需要一個個手動設置(如圖1),你要知道,需要設置上百個的這些選項是件多么痛苦的事情,而且最后很可能會因為外鍵約束導致導入導出失敗。
      (圖1)
      雖然SSMS在導入導出的最后一步提供了生成SSIS包的功能,但是對于轉移數據的需求來說,還是無法達到我想要的快速、方便。
      自然而然,我想到了INSERT INTO XX SELECT FROM XX WHERE這樣的方式(這種方式的好處就是可以對數據記錄、字段進行控制),但是如何才能快速生成整個數據庫所有表的這些語句呢?
      假如你需要批量生成下面的SQL,我想這篇文章就可以幫到你了:
      --[OpinionList]
      SET IDENTITY_INSERT [master_new].[dbo].[OpinionList] ON
      INSERT INTO [master_new].[dbo].[OpinionList](Id,Batch,LinkId,DB_Names,CreateTime)
      SELECT * FROM [DBA_DB].[dbo].[OpinionList]
      SET IDENTITY_INSERT [master_new].[dbo].[OpinionList] OFF
      GO
      二、 腳本解釋
      (一) 我編寫了一個模板,這個模板你只需要設置@fromdb和@todb的名稱,這樣就會生成從@fromdb導出所有表插入到@todb中的SQL語句,需要注意的是:要選擇@fromdb對應的數
    據庫執行模板SQL,不然無法生成需要的表和字段。
    DECLARE @fromdb VARCHAR(100)
    DECLARE @todb VARCHAR(100)
    DECLARE @tablename VARCHAR(100)
    DECLARE @columnnames NVARCHAR(300)
    DECLARE @isidentity NVARCHAR(30)
    DECLARE @temsql NVARCHAR(max)
    DECLARE @sql NVARCHAR(max)
    SET @fromdb = 'master'
    SET @todb = 'master_new'
    --游標
    DECLARE @itemCur CURSOR
    SET @itemCur = CURSOR FOR
    SELECT '['+[name]+']' from sys.tables WHERE type='U' order by name
    OPEN @itemCur
    FETCH NEXT FROM @itemCur INTO @tablename
    WHILE @@FETCH_STATUS=0
    BEGIN
    SET @sql = ''
    --獲取表字段
    SET @temsql = N'
    BEGIN
    SET @columnnamesOUT =''''
    SELECT @columnnamesOUT = @columnnamesOUT + '','' + name
    From sys.columns where object_id=OBJECT_ID(''['+@fromdb+'].dbo.'+@tablename+''')
    order by column_id
    SELECT @columnnamesOUT=substring(@columnnamesOUT,2,len(@columnnamesOUT))
    END
    '
    EXEC sp_executesql @temsql,N'@columnnamesOUT NVARCHAR(300) OUTPUT',@columnnamesOUT=@columnnames OUTPUT
    PRINT ('--'+@tablename)
    --判斷是否有自增字段
    SET @temsql = N'
    BEGIN
    SET @isidentityOUT =''''
    SELECT @isidentityOUT = name
    From sys.columns where object_id=OBJECT_ID(''['+@fromdb+'].dbo.'+@tablename+''')
    and is_identity = 1
    END
    '
    EXEC sp_executesql @temsql,N'@isidentityOUT NVARCHAR(30) OUTPUT',@isidentityOUT=@isidentity OUTPUT
    --IDENTITY_INSERT ON
    IF @isidentity != ''
    BEGIN
    SET @sql = 'SET IDENTITY_INSERT ['+@todb+'].[dbo].['+@tablename+'] ON
    '
    END
    --INSERT
    SET @sql = @sql+'INSERT INTO ['+@todb+'].[dbo].['+@tablename+']('+@columnnames+')
    SELECT * FROM ['+@fromdb+'].[dbo].['+@tablename+']'
    --IDENTITY_INSERT OFF
    IF @isidentity != ''
    BEGIN
    SET @sql = @sql+'
    SET IDENTITY_INSERT ['+@todb+'].[dbo].['+@tablename+'] OFF'
    END
    --返回SQL
    PRINT(@sql)PRINT('GO')+CHAR(13)
    FETCH NEXT FROM @itemCur INTO @tablename
    END
    CLOSE @itemCur
    DEALLOCATE @itemCur
      (二) 下面就是返回的生成的部分腳本,模板會自動判斷表是否存在自增字段,如果存在就會生成對應的IDENTITY_INSERT語句。
    --spt_values
    INSERT INTO [master_new].[dbo].[spt_values](name,number,type,low,high,status)
    SELECT * FROM [master].[dbo].[spt_values]
    GO
    --[OpinionList]
    SET IDENTITY_INSERT [master_new].[dbo].[OpinionList] ON
    INSERT INTO [master_new].[dbo].[OpinionList](Id,Batch,LinkId,DB_Names,CreateTime)
    SELECT * FROM [DBA_DB].[dbo].[OpinionList]
    SET IDENTITY_INSERT [master_new].[dbo].[OpinionList] OFF
    GO

    posted on 2014-11-06 10:40 順其自然EVO 閱讀(417) 評論(0)  編輯  收藏 所屬分類: 測試學習專欄

    <2014年11月>
    2627282930311
    2345678
    9101112131415
    16171819202122
    23242526272829
    30123456

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产精品成人四虎免费视频| 日韩精品成人无码专区免费| 亚洲午夜成人精品电影在线观看| 国产精品亚洲专区无码牛牛| 我要看WWW免费看插插视频| 亚洲三级在线视频| 大香人蕉免费视频75| 亚洲a∨无码一区二区| 国产视频精品免费| 免费人成又黄又爽的视频在线电影| 国产yw855.c免费视频| 成人a毛片视频免费看| 亚洲最大激情中文字幕| 免费黄网站在线看| 亚洲日韩乱码中文无码蜜桃| 24小时免费直播在线观看| 亚洲AV无码一区二区三区性色| 国产zzjjzzjj视频全免费| 一级特黄录像免费播放肥| 亚洲午夜精品久久久久久人妖| 日韩在线免费视频| 亚洲AV无码AV吞精久久| 国产亚洲精品成人a v小说| 久久成人无码国产免费播放| 亚洲午夜成激人情在线影院| 免费无码不卡视频在线观看| 91av免费在线视频| 亚洲二区在线视频| 亚洲国产黄在线观看| 免费无码成人AV在线播放不卡| xxx毛茸茸的亚洲| 国产亚洲情侣一区二区无码AV| 99re免费在线视频| 深夜a级毛片免费视频| 18gay台湾男同亚洲男同| 韩国欧洲一级毛片免费| A级毛片成人网站免费看| 亚洲AV成人影视在线观看| 在线亚洲精品福利网址导航| 131美女爱做免费毛片| 黄色毛片免费观看|