比方說有張表A,裡面有個字段A1 varchar(5),現在想把它改名為A2 sp_rename 'A.A1','A2','column'; --將A表中column(列,字段)A1改名為A2 如果想將表A改名為B,可以這樣: sp_rename 'A','B';alter table A alter column A1 varchar(8); --將A表中column(列,字段)A1從 varchar(5)改到varchar(8)
我想改某一列的类型,不如原来是varchar现在改为float
你要沒數據才能從 字符型改到數值型. 否則比方說 'hello'改成float 你說該怎樣?並且如果定義的字段長度全用完的話. 就不能改小只能改大. 比如:表A中有字段A1是decimal(6,2)其中有數據1234.50alter table A alter column A1 decimal(5,1); --這樣會報錯 alter table A alter column A1 decimal(7,3); --這樣會成功
sp_rename 'A.A1','A2','column'; --將A表中column(列,字段)A1改名為A2
如果想將表A改名為B,可以這樣:
sp_rename 'A','B';alter table A alter column A1 varchar(8); --將A表中column(列,字段)A1從
varchar(5)改到varchar(8)
字符型改到數值型.
否則比方說
'hello'改成float
你說該怎樣?並且如果定義的字段長度全用完的話.
就不能改小只能改大.
比如:表A中有字段A1是decimal(6,2)其中有數據1234.50alter table A alter column A1 decimal(5,1); --這樣會報錯
alter table A alter column A1 decimal(7,3); --這樣會成功
create procedure pr_modifycolumn @tablename varchar(200) , @columname varchar(200) , @type varchar(100)
begin
declare @cmd varchar(8000)
--加一个临时列
set @cmd = 'alter table ' + @tablename + 'add column temp_column ' + @type + 'go'
exec(@cmd)
--把数据倒过去,并转化成所需类型
set @cmd = 'update ' + @tablename + ' set temp_column '+ ' = convert(' + @type + ' , ' + @columname + ')'
exec(@cmd)
--把原来的列删除
set @cmd = 'alter table ' + @tablename + 'drop column ' + @columname
exec(@cmd)
--加一个正确的列
set @cmd = 'alter table ' + @tablename + 'add column ' + @columname + @type + ' go '
exec(@cmd)
--把数据倒进来
set @cmd = 'update ' + @tablename + ' set ' + @columname + ' = temp_column '
exec(@cmd)
--删除临时列。
set @cmd = 'alter table ' + @tablename + 'drop column temp_column '
end
大概这样就可以吧,试一试,实际用时最好加上异常处理。