2014-07-22 39 views
0

我有多個表,其中有需要通過外鍵鏈接的列,問題是其中一些列有不同的character_max_length如何更新這些特定的表?如何更改特定表的CHARACTER_MAX_LENGTH

一個例子列select語句:

SELECT column_name, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE UPPER(column_name) LIKE '%MUNT%' 

,給了我這樣的:

enter image description here

現在可以說,我要所有的人更改爲5

我以前使用過this code來更改數據類型,這可能有點幫助嗎?

感謝您考慮我的問題

+0

你使用哪個數據庫(mysql,sql-server,oracle。 。)? – Jens

+0

我的不好:我使用的是SQL Server 2012,數據庫版本是2008 – Edward

+0

@Alma Do,看到select語句正常工作並給了我一個正確的輸出,我會說是的 – Edward

回答

1

你試過:

Alter tabel tableName alter column columnName NVARCHAR(5) 

或者嘗試這種更寬泛的版本:

use [YourDatabaseName] 

declare @tn nvarchar(128) 
declare @cn nvarchar(128) 
declare @sql as nvarchar(1000) 

declare c cursor for 
    select table_name,column_name 
    from information_schema.columns 
    where TABLE_NAME not in (select TABLE_NAME from INFORMATION_SCHEMA.VIEWS) 
    AND UPPER(column_name) LIKE '%MUNT%' 
open c 
fetch next from c into @tn, @cn 

while @@FETCH_STATUS = 0 
begin 
    set @sql = 'alter table ' + @tn + ' alter column ' 
     + @cn + ' nvarchar(5)' 
    exec sp_executesql @sql 
    fetch next from c into @tn, @cn 
end 
close c 
deallocate c 
+0

我知道這會工作,但讓我說我有200列要更改,我不會編輯該查詢200次。我會想在alter語句中使用子查詢,但這不起作用 – Edward

+0

@Edward我編輯了我的答案。 – Jens

+0

,謝謝你的時間和精力,這對我幫助很大。 對於其他人的小技巧,請做這些更改,並確保所有的數據類型和長度都正確之前,使主/外鍵或你會很難。 – Edward