1. 程式人生 > >SQL中改變列的資料型別

SQL中改變列的資料型別

一、該列非主鍵、無default約束

直接更新:

alter table 表名 alter column 列名 資料型別

二、該列為主鍵列、無default約束

(1)刪除主鍵

alter table 表名 drop constraint 主鍵名稱

(2)更新資料型別

alter table 表名 alter column 列名 資料型別 not null

(3)新增主鍵

alter table 表名 add constraint 主鍵名稱 primary key (主鍵欄位1,主鍵欄位2)

三、該列為主鍵列,有default約束

(1)刪除主鍵

alter table 表名 drop constraint 主鍵名稱

(2)解除default約束

USE 資料庫名
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'default約束名' 
AND type = 'D')
BEGIN 
EXEC sp_unbindefault '資料表.欄位'
END
GO

(3)更新資料型別

alter table 表名 alter column 列名 資料型別 not null

(4)新增主鍵

alter table 表名 add constraint 主鍵名稱 primary key (主鍵欄位1,主鍵欄位2)

輔助語句:

(1)找出欄位約束名稱並賦值到變數中

declare @name varchar(50)
select  @name =b.name from sysobjects b join syscolumns a on b.id = a.cdefault 
where a.id = object_id('表名') 
and a.name ='列名'

(2)將欄位繫結到使用者自定義的資料型別,並不影響現有繫結(使用futureonly)

此示例將預設值 def_ssn 繫結到使用者定義的資料型別 ssn。因為已指定 futureonly,所以不影響型別 ssn 的現有列。
USE 資料庫名
EXEC sp_bindefault '列名', '自定義資料型別', 'futureonly'