![](/img/trans.png)
[英]SQL Server SUM of values in column counted 3 different ways in the same output
[英]SQL Server different ways to drop a column
我創建了一個名為“已識別”的列,並分配了一個默認值“1”。 現在我意識到我想刪除該列。 但是當我嘗試時,我收到以下錯誤:
消息 5074,第 16 級,State 1,第 5 行
object 'DF__orders__Identifi__403A8C7D' 取決於列 'Identified'。消息 4922,第 16 級,State 9,第 5 行
ALTER TABLE DROP COLUMN 識別失敗,因為一個或多個對象訪問此列。
這是使用的代碼:
ALTER TABLE BikeStores.sales.orders
DROP COLUMN Identified;
我也試過:
ALTER TABLE BikeStores.sales.orders
DROP Identified;
但在這種情況下,錯誤得到的是:
消息 3728,第 16 層,State 1,第 5 行
“已識別”不是約束。消息 3727,第 16 級,State 0,第 5 行
無法刪除約束。 請參閱以前的錯誤。
有關如何解決此錯誤的任何提示? 提前致謝
無法刪除該列,因為默認約束依賴於現有的列。 首先刪除默認約束。
如果您正在使用的 SQL 服務器的版本是 2016 或之前的版本,您可以使用簡單查詢:
ALTER TABLE BikeStores.sales.orders ALTER COLUMN Identified DROP DEFAULT;
從 2017 年起,您將需要明確使用默認約束名稱
ALTER TABLE BikeStores.sales.orders DROP CONSTRAINT DF__orders__Identifi__403A8C7D;
如果您不知道默認值的名稱(由於它在創建時自動命名),以下腳本將識別並刪除默認值。
declare @schema_name nvarchar(256)
declare @table_name nvarchar(256)
declare @col_name nvarchar(256)
declare @Command nvarchar(1000)
set @schema_name = N'sales'
set @table_name = N'orders'
set @col_name = N'Identitified'
select @Command = 'ALTER TABLE ' + @schema_name + '.[' + @table_name + '] DROP CONSTRAINT ' + d.name
from sys.tables t
join sys.default_constraints d on d.parent_object_id = t.object_id
join sys.columns c on c.object_id = t.object_id and c.column_id = d.parent_column_id
where t.name = @table_name
and t.schema_id = schema_id(@schema_name)
and c.name = @col_name
EXEC sp_executesql @Command
(最后一部分歸功於這個問題) 如何在不知道其名稱的情況下刪除 SQL 默認約束?
然后,您將能夠刪除您的列
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.