2012-07-27 87 views
2

我在一個大型文本文件上做了一個批量插入,這個文件是我現有數據庫的一個更新。我遇到截斷錯誤的各種麻煩,所以我只是把所有東西都設置爲varchar(max)。現在一切都在SQL Server中,我想將數據庫b中的數據類型轉換爲數據庫a中的數據類型。如果兩個數據庫都具有相同的表和字段名稱,那麼完成此操作的一些方法是什麼?或者最好是有一個預先存在的腳本,在導入後運行'硬編碼'將數據類型從一個數據庫錶轉換爲另一個

+1

您是否需要將所有內容都設置爲'varchar(max)'?當然,你只需要將已經是varchar的列的長度設置爲max,所有其他的數據類型可能會很好,你不會在這個混亂!重新進口的可能性?這可能會減少工作。 – Bridge 2012-07-27 13:20:18

+0

CAST()函數? – 2012-07-27 13:22:41

+0

您的副本數據庫是否有任何鍵,關係,索引等? – 2012-07-27 13:31:13

回答

1

嘗試這樣的事情,並修改結果,並執行它

declare @sql varchar(max) 
set @sql='' 
select 
    @[email protected]+'Alter table '+table_name+' alter column '+column_name+' '+cast(data_type as varchar(100))+ 
    case when data_type like '%char%' then '(' else '' end +cast(coalesce(CHARACTER_MAXIMUM_LENGTH,'') as varchar(100))+ 
    case when data_type like '%char%' then ')' else '' end+';' 
from 
    information_schema.columns 
where 
    table_name='test' 
print @sql 
+0

我還沒有寫出任何動態的SQL呢:) – wootscootinboogie 2012-07-27 13:41:49

+0

這就是我所要做的。更多的是關於它的一種僞代碼方式。 – wootscootinboogie 2012-07-27 13:44:05

+0

好的。有些情況下,你需要動態的sql – Madhivanan 2012-07-27 13:45:00

0

如果您要將數據從一個sql server數據庫移動到另一個sql server數據庫,則可以使用Atlantis Interactive Data Inspector。如果您不想這樣做,則可以在數據庫a中編寫表格,然後在每列之前粘貼ALTER TABLE [table] ALTER COLUMN並在數據庫b上運行。

+0

這樣我倒退了。我正在考慮類似於'a.column1 = a.column2'語句來運行演員函數的情況。 – wootscootinboogie 2012-07-27 13:43:11

1

您可以創建表格的查看您希望從拉和只投(),您需要更改爲數據類型的列你需要改變它們。然後,您可以僅使用適當的數據類型從該視圖中完成所有插入操作。希望有所幫助。

相關問題