簡體   English   中英

SQL 服務器不同的方式掉一列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM