星期三, 1月 09, 2013

找出資料庫中自動編號的欄位名稱與資料表名稱


最近在做資料庫的移轉,因為資料庫中的東綁西綁的,導致無法很簡單的完成,最後只好土法煉鋼,先將結構建立好後,然後用INSERT INTO去把資料轉過去,討厭的是還有很多自動編號的欄位會造成錯誤,這部份就只好特別挑出來處理,首先就要先找出有哪些Table中有自動編號的欄位了
SELECT QUOTENAME(t.TABLE_SCHEMA) + '.' + QUOTENAME(t.TABLE_NAME)  AS TableName,
  c.COLUMN_NAME AS ColumnName,
  c.DATA_TYPE AS 'DataType',
  IDENT_CURRENT(t.TABLE_SCHEMA  + '.' + t.TABLE_NAME) AS CurrentIdentityValue,
  CASE c.DATA_TYPE
   WHEN 'bigint' THEN (IDENT_CURRENT(t.TABLE_SCHEMA  + '.' + t.TABLE_NAME) * 100.) / 9223372036854775807
   WHEN 'int' THEN (IDENT_CURRENT(t.TABLE_SCHEMA  + '.' + t.TABLE_NAME) * 100.) / 2147483647
   WHEN 'smallint' THEN (IDENT_CURRENT(t.TABLE_SCHEMA  + '.' + t.TABLE_NAME) * 100.) / 32767
   WHEN 'tinyint' THEN (IDENT_CURRENT(t.TABLE_SCHEMA  + '.' + t.TABLE_NAME) * 100.) / 255
  END AS 'PercentageUsed'
 FROM INFORMATION_SCHEMA.COLUMNS AS c
  INNER JOIN
  INFORMATION_SCHEMA.TABLES AS t
  ON c.TABLE_SCHEMA = t.TABLE_SCHEMA AND c.TABLE_NAME = t.TABLE_NAME
 WHERE COLUMNPROPERTY(OBJECT_ID(t.TABLE_SCHEMA + '.' + t.TABLE_NAME), c.COLUMN_NAME, 'isIdentity') = 1
出處:http://wushinetlife.blogspot.tw/2012/03/blog-post_15.html

3 則留言:

TerryTsai 提到...

SQL 對 SQL 移轉,大量匯出匯入是最快速的喔,查查 BCP OUT 和 BULK INSERT ,並小心 LOG 檔的大小,免得讓它一直變大 ~~

昇氣蓬柏 提到...

Log檔就是定時去縮小它呀

反正我們每天都有完整備份

每小時都有交易備份!!!

TerryTsai 提到...

當交易資料越來越多,達到 Log File 大小的上限,預設 Log File 是會自動成長變大,交易備份只會備份 Log File 內的交易資料,不會壓縮 Log File 的大小,要縮小 Log File 大小,只有用壓縮才可以,但壓縮會造成硬碟磁區不連續而降低硬碟IO,沒有必要就不要作。

這篇是匯資料匯到 Log 檔爆增的文章可以參考看看 ~~
http://blog.darkthread.net/blogs/darkthreadtw/archive/2008/01/12/1507.aspx

大量匯入資料時,控制交易資料很重要,不要讓 Log File 爆增把硬碟塞爆,沒有硬碟空間會比匯不進去更難處理,給你參考 ~~ ^_^ ~~