使用SQL SERVER。
要刪除具有Default屬性的欄位,也就是具有相依性的欄位。
通常直接下以下指令會出現錯誤訊息
ALTER TABLE TableName DROP COLUMN TableColumn
錯誤訊息類似
資料表與xxx相依……
此時需先把相依性給刪除,執行以下指令可找出相依性。
EXEC sp_helpconstraint @objname = 'TableName'
找到後刪除
ALTER TABLE TableName DROP CONSTRAINT constraint_name
接著就可以回到一開始把欄位給刪掉了。
---------------------------------------------------------------------------------------------------------------------
有時候要對大量TABLE進行新增欄位,可是又不確定哪些資料表有新增過。
要避免錯誤訊息跑出來嚇人,可以用以下的寫法。
IF (select count(name) from syscolumns where id=object_id('TableName') and name='ColumnsName') = 0
BEGIN
ALTER TABLE TableName
--add the col u want
ADD ColumnsName nvarchar(100) NULL DEFAULT ''
END
原理就是判斷資料表中有沒有這個欄位,沒有的話就新增。這麼一來就不會有錯誤訊息出現了。
---------------------------------------------------------------------------------------------------------------------
重設primary key指令碼。
ALTER TABLE TableName DROP CONSTRAINT PK_NAME
ALTER TABLE TableName ADD CONSTRAINT PK_NAME PRIMARY KEY(Col_A, Col_B, Col_C)
查過資料才發現ADD的時候加上CONSTRAINT PK_NAME可為條件約束命名。
每次建立的時候,除非命名,否則PK_NAME都會不一樣。
那如何在無法得知 PK_NAME的情況下新增呢?
利用變數及EXEC可以達到這點。
DECLARE @PKNAME nvarchar(30)
SELECT @PKNAME = name FROM SYS.objects
WHERE OBJECT_NAME(PARENT_OBJECT_ID)='TableName'
AND type_desc LIKE '%CONSTRAINT' AND type = 'PK'
EXEC( 'ALTER TABLE TableName DROP CONSTRAINT ' + @PKNAME )
ALTER TABLE TableName ADD CONSTRAINT PK_NAME PRIMARY KEY(Col_A, Col_B, Col_C)
0 comments:
張貼留言