Sql server 是否应在删除旧约束之前添加新约束
在删除原始约束之前,是否应该为主键添加新约束?我在删除约束时遇到问题。我想删除它并添加一个新的约束,但它抛出适合。这是代码。丢弃会抛出错误 Msg 3728,第16级,状态1,第1行“车辆ID\U名称”不是约束条件。 Msg 3727,第16级,状态0,第1行 无法删除约束。请参阅前面的错误Sql server 是否应在删除旧约束之前添加新约束,sql-server,tsql,primary-key,Sql Server,Tsql,Primary Key,在删除原始约束之前,是否应该为主键添加新约束?我在删除约束时遇到问题。我想删除它并添加一个新的约束,但它抛出适合。这是代码。丢弃会抛出错误 Msg 3728,第16级,状态1,第1行“车辆ID\U名称”不是约束条件。 Msg 3727,第16级,状态0,第1行 无法删除约束。请参阅前面的错误 ------BEGIN NAME CHANGE-------------------------------------------------------------------------------
------BEGIN NAME CHANGE----------------------------------------------------------------------------------------------------
BEGIN TRY
EXEC sp_RENAME 'dbo.Invoice.TruckOrTrain', 'Truck_Or_Train', 'COLUMN'
EXEC sp_RENAME 'dbo.Invoice.blnSell', 'Sell', 'COLUMN'
EXEC sp_RENAME 'dbo.Invoice.blnHaul', 'Haul', 'COLUMN'
EXEC sp_RENAME 'dbo.Invoice.blnProceMaint', 'Proce_Maint', 'COLUMN'
EXEC sp_RENAME 'dbo.Invoice.blnSell_fCharge', 'Sell_Charge', 'COLUMN'
EXEC sp_RENAME 'dbo.Invoice.blnHaul_fCharge', 'Haul_Charge', 'COLUMN'
EXEC sp_RENAME 'dbo.Invoice.blnProceMaint_fCharge', 'Proce_Maint_Charge', 'COLUMN'
EXEC sp_RENAME 'dbo.Invoice.strInvoice_Start_Date', 'Invoice_Start_Date', 'COLUMN'
EXEC sp_RENAME 'dbo.Invoice.strInvoice_End_Date', 'Invoice_End_Date', 'COLUMN'
EXEC sp_RENAME 'dbo.List_Rates.Fule_Rate', 'Fuel_Rate', 'COLUMN'
EXEC sp_RENAME 'dbo.List_Vendors.Address', 'Vendor_Address', 'COLUMN'
EXEC sp_RENAME 'dbo.List_Vendors.City', 'Vendor_City', 'COLUMN'
EXEC sp_RENAME 'dbo.List_Vendors.State', 'Vendor_State', 'COLUMN'
EXEC sp_RENAME 'dbo.List_Vendors.Zip_Code', 'Vendor_Zip_Code', 'COLUMN'
EXEC sp_RENAME 'dbo.List_Vendors.Phone_1', 'Vendor_Phone_1', 'COLUMN'
EXEC sp_RENAME 'dbo.List_Vendors.Cell_Phone', 'Vendor_Cell_Phone', 'COLUMN'
EXEC sp_RENAME 'dbo.List_Vendors.Fax', 'Vendor_Fax', 'COLUMN'
EXEC sp_RENAME 'dbo.List_Vendors.Email', 'Vendor_Email', 'COLUMN'
EXEC sp_RENAME 'dbo.List_Vendors.Website', 'Vendor_Website', 'COLUMN'
EXEC sp_RENAME 'dbo.List_Vendors.Contact_Name', 'Vendor_Contact_Name', 'COLUMN'
EXEC sp_RENAME 'dbo.List_Vendors.Train', 'Vendor_Train', 'COLUMN'
EXEC sp_RENAME 'dbo.List_Vendors.Truck', 'Vendor_Truck', 'COLUMN'
EXEC sp_RENAME 'dbo.List_Vendors.Active_Rec', 'Vendor_Active_Rec', 'COLUMN'
EXEC sp_RENAME 'dbo.Program_Access.Password', 'UserPassword', 'COLUMN'
EXEC sp_RENAME 'dbo.Program_Access.Role', 'UserRole', 'COLUMN'
PRINT 'Name Change'
END TRY
BEGIN CATCH
PRINT 'Failed Name Change'
END CATCH
GO
-------END NAME CHANGE--------------------------------------------------------------------------------------------------
-------UPDATE TABLES------------------------------------------------------------------------------------------------
BEGIN TRY
UPDATE dbo.List_Commodity
SET Train = 1
WHERE Train = 'YES'
UPDATE dbo.List_Commodity
SET Train = 0
WHERE Train = 'NO'
UPDATE dbo.List_Commodity
SET Truck = 1
WHERE Truck = 'YES'
UPDATE dbo.List_Commodity
SET Truck = 0
WHERE Truck = 'NO'
UPDATE dbo.List_Commodity
SET Active_Rec = 1
WHERE Active_Rec = 'YES'
UPDATE dbo.List_Commodity
SET Active_Rec = 0
WHERE Active_Rec = 'NO'
UPDATE dbo.List_Rates
SET Rec_Closed = 1
WHERE Rec_Closed = 'YES'
UPDATE dbo.List_Rates
SET Rec_Closed = 0
WHERE Rec_Closed = 'NO'
UPDATE dbo.List_Rates
SET Buy_per_Load = 1
WHERE Buy_per_Load = 'YES'
UPDATE dbo.List_Rates
SET Buy_per_Load = 0
WHERE Buy_per_Load = 'NO'
UPDATE dbo.List_Rates
SET Sell_per_Load = 1
WHERE Sell_per_Load = 'YES'
UPDATE dbo.List_Rates
SET Sell_per_Load = 0
WHERE Sell_per_Load = 'NO'
UPDATE dbo.List_Rates
SET Haul_per_Load = 1
WHERE Haul_per_Load = 'YES'
UPDATE dbo.List_Rates
SET Haul_per_Load = 0
WHERE Haul_per_Load = 'NO'
UPDATE dbo.List_Vendors
SET Vendor_Train = 1
WHERE Vendor_Train = 'YES'
UPDATE dbo.List_Vendors
SET Vendor_Train = 0
WHERE Vendor_Train = 'NO'
UPDATE dbo.List_Vendors
SET Vendor_Truck = 1
WHERE Vendor_Truck = 'YES'
UPDATE dbo.List_Vendors
SET Vendor_Truck = 0
WHERE Vendor_Truck = 'NO'
UPDATE dbo.List_Vendors
SET Vendor_Active_Rec = 1
WHERE Vendor_Active_Rec = 'YES'
UPDATE dbo.List_Vendors
SET Vendor_Active_Rec = 0
WHERE Vendor_Active_Rec = 'NO'
PRINT 'Update'
END TRY
BEGIN CATCH
PRINT 'Failed Update'
END CATCH
GO
-------END UPDATE--------------------------------------------------------------------------------------------------
-------DROP CONSTRIANTS--------------------------------------------------------------------------------------------------
BEGIN TRY
ALTER TABLE dbo.LightWeight
DROP CONSTRAINT CAR_ID_Name
ALTER TABLE dbo.List_Commodity
DROP CONSTRAINT Commodity
ALTER TABLE dbo.List_Vendors
DROP CONSTRAINT Vendor_Name
ALTER TABLE dbo.Pile_0_Management
DROP CONSTRAINT [Date]
ALTER TABLE dbo.Pile_1_Management
DROP CONSTRAINT [Date]
ALTER TABLE dbo.Pile_MM_Management
DROP CONSTRAINT [Date]
PRINT 'Constraints'
END TRY
BEGIN CATCH
PRINT 'Failed Constraints'
END CATCH
GO
-------END Drop CONSTRAINTS--------------------------------------------------------------------------------------------------
-------BEGIN ALTER TABLES--------------------------------------------------------------------------------------------------
BEGIN TRY
--InBound Truck
ALTER TABLE dbo.InBound
ALTER COLUMN CAR_ID NVARCHAR(30)
ALTER TABLE dbo.InBound
ALTER COLUMN PO_Number NVARCHAR(30)
ALTER TABLE dbo.InBound
ALTER COLUMN Vendor NVARCHAR(30)
ALTER TABLE dbo.InBound
ALTER COLUMN Shipper NVARCHAR(30)
ALTER TABLE dbo.InBound
ALTER COLUMN Commodity NVARCHAR(30)
ALTER TABLE dbo.InBound
ALTER COLUMN Operator_In NVARCHAR(20)
ALTER TABLE dbo.InBound
ALTER COLUMN Comments_In NVARCHAR(200)
ALTER TABLE dbo.InBound
ALTER COLUMN FileCounter BIGINT
--InRoute
ALTER TABLE dbo.Invoice
ALTER COLUMN Vendor_Name NVARCHAR(100)
ALTER TABLE dbo.Invoice
ALTER COLUMN Commodity NVARCHAR(100)
ALTER TABLE dbo.Invoice
ALTER COLUMN Sell NVARCHAR(100)
ALTER TABLE dbo.Invoice
ALTER COLUMN Haul NVARCHAR(100)
ALTER TABLE dbo.Invoice
ALTER COLUMN Proce_Maint NVARCHAR(100)
ALTER TABLE dbo.Invoice
ALTER COLUMN truck_Or_Train NVARCHAR(50)
ALTER TABLE dbo.Invoice
ALTER COLUMN Sell_Charge NVARCHAR(50)
ALTER TABLE dbo.Invoice
ALTER COLUMN Haul_Charge NVARCHAR(50)
ALTER TABLE dbo.Invoice
ALTER COLUMN Proce_Maint_Charge NVARCHAR(50)
ALTER TABLE dbo.Invoice
ALTER COLUMN Operator NVARCHAR(50)
ALTER TABLE dbo.Invoice
ALTER COLUMN Invoice_Num BIGINT
--LightWeight
ALTER TABLE dbo.LightWeight
ALTER COLUMN CAR_ID_Name NVARCHAR(30)
ALTER TABLE dbo.LightWeight
ALTER COLUMN Vendor_Name NVARCHAR(30)
ALTER TABLE dbo.LightWeight
ALTER COLUMN PK_ID BIGINT
--List_Commodity
ALTER TABLE dbo.List_Commodity
ALTER COLUMN Commodity NVARCHAR(100)
ALTER TABLE dbo.List_Commodity
ALTER COLUMN [DESCRIPTION] NVARCHAR(200)
ALTER TABLE dbo.List_Commodity
ALTER COLUMN Train BIT
ALTER TABLE dbo.List_Commodity
ALTER COLUMN Truck BIT
ALTER TABLE dbo.List_Commodity
ALTER COLUMN Commodity_ID BIGINT
ALTER TABLE dbo.List_Commodity
ALTER COLUMN Active_Rec BIT
--List_fuel_Surcharge
ALTER TABLE dbo.List_Fuel_Surcharge
ALTER COLUMN Rec_ID BIGINT
--List_Rates
ALTER TABLE dbo.List_Rates
ALTER COLUMN Rec_ID BIGINT NOT NULL
ALTER TABLE dbo.List_Rates
ALTER COLUMN Vendor_Name NVARCHAR(100)
ALTER TABLE dbo.List_Rates
ALTER COLUMN Sell_per_Load BIT
ALTER TABLE dbo.List_Rates
ALTER COLUMN Commodity NVARCHAR(100)
ALTER TABLE dbo.List_Rates
ALTER COLUMN GL_Account NVARCHAR(20)
ALTER TABLE dbo.List_Rates
ALTER COLUMN Cost_Center NVARCHAR(20)
ALTER TABLE dbo.List_Rates
ALTER COLUMN Internal_Order_Num NVARCHAR(20)
ALTER TABLE dbo.List_Rates
ALTER COLUMN Rec_Closed BIT
ALTER TABLE dbo.List_Rates
ALTER COLUMN Buy_per_Load BIT
ALTER TABLE dbo.List_Rates
ALTER COLUMN Haul_per_Load BIT
--List_Vendors
ALTER TABLE dbo.List_Vendors
ALTER COLUMN Vendor_Name NVARCHAR(100)
ALTER TABLE dbo.List_Vendors
ALTER COLUMN Vendor_SAP_Num NVARCHAR(100)
ALTER TABLE dbo.List_Vendors
ALTER COLUMN Vendor_Address NVARCHAR(100)
ALTER TABLE dbo.List_Vendors
ALTER COLUMN Vendor_City NVARCHAR(100)
ALTER TABLE dbo.List_Vendors
ALTER COLUMN Vendor_State NVARCHAR(50)
ALTER TABLE dbo.List_Vendors
ALTER COLUMN Vendor_Zip_Code NVARCHAR(50)
ALTER TABLE dbo.List_Vendors
ALTER COLUMN Vendor_Phone_1 NVARCHAR(100)
ALTER TABLE dbo.List_Vendors
ALTER COLUMN Vendor_Cell_Phone NVARCHAR(100)
ALTER TABLE dbo.List_Vendors
ALTER COLUMN Vendor_Fax NVARCHAR(100)
ALTER TABLE dbo.List_Vendors
ALTER COLUMN Vendor_Email NVARCHAR(100)
ALTER TABLE dbo.List_Vendors
ALTER COLUMN Vendor_Website NVARCHAR(200)
ALTER TABLE dbo.List_Vendors
ALTER COLUMN Vendor_Contact_Name NVARCHAR(100)
ALTER TABLE dbo.List_Vendors
ALTER COLUMN Vendor_Train BIT
ALTER TABLE dbo.List_Vendors
ALTER COLUMN Vendor_Truck BIT
ALTER TABLE dbo.List_Vendors
ALTER COLUMN Vendor_ID BIGINT
ALTER TABLE dbo.List_Vendors
ALTER COLUMN Vendor_Active_Rec BIT
--Program_Access
ALTER TABLE dbo.Program_Access
ALTER COLUMN UserName NVARCHAR(50)
ALTER TABLE dbo.Program_Access
ALTER COLUMN UserPassword NVARCHAR(50)
ALTER TABLE dbo.Program_Access
ALTER COLUMN FirstName NVARCHAR(50)
ALTER TABLE dbo.Program_Access
ALTER COLUMN LastName NVARCHAR(50)
--Transaction_Truck
ALTER TABLE dbo.Transactions_Truck
ALTER COLUMN Transaction_Num BIGINT
ALTER TABLE dbo.Transactions_Truck
ALTER COLUMN Car_ID NVARCHAR(30)
ALTER TABLE dbo.Transactions_Truck
ALTER COLUMN PO_Number NVARCHAR(30)
ALTER TABLE dbo.Transactions_Truck
ALTER COLUMN Vendor NVARCHAR(30)
ALTER TABLE dbo.Transactions_Truck
ALTER COLUMN Shipper NVARCHAR(30)
ALTER TABLE dbo.Transactions_Truck
ALTER COLUMN Commodity NVARCHAR(60)
ALTER TABLE dbo.Transactions_Truck
ALTER COLUMN Operator_In NVARCHAR(5)
ALTER TABLE dbo.Transactions_Truck
ALTER COLUMN Operator_Out NVARCHAR(5)
ALTER TABLE dbo.Transactions_Truck
ALTER COLUMN Comments_In NVARCHAR(200)
ALTER TABLE dbo.Transactions_Truck
ALTER COLUMN Comments_Out NVARCHAR(200)
ALTER TABLE dbo.Transactions_Truck
ALTER COLUMN Weight_In DECIMAL(18,0)
ALTER TABLE dbo.Transactions_Truck
ALTER COLUMN Weight_Out DECIMAL(18,0)
ALTER TABLE dbo.Transactions_Truck
ALTER COLUMN Trans_Depend NVARCHAR(200)
PRINT 'Alter Tables'
END TRY
BEGIN CATCH
PRINT' Failed Alter'
END CATCH
GO
-------END ALTER TABLES--------------------------------------------------------------------------------------------------
-------BEGIN ADD TABLES--------------------------------------------------------------------------------------------------
BEGIN TRY
CREATE TABLE dbo.Exception_Log
(
Exception_ID BIGINT PRIMARY KEY IDENTITY(1,1) NOT NULL,
Method_Name NVARCHAR(100) NOT NULL,
Class_Name NVARCHAR(100) NOT NULL,
Exception_Description NVARCHAR(MAX) NOT NULL,
Exception_Date_Time NVARCHAR(200) NULL
)
CREATE TABLE dbo.InBound_Train
(
FileCounter BIGINT PRIMARY KEY IDENTITY(1,1) NOT NULL,
Car_ID NVARCHAR(50) NOT NULL,
PO_Number NVARCHAR(50) NULL,
Vendor NVARCHAR(50) NULL,
Shipper NVARCHAR(50) NULL,
Commodity NVARCHAR(50) NULL,
Date_Notified DATETIME NOT NULL,
Date_Weighed_In INT NOT NULL,
Pile_No INT NULL,
Pile_No1 INT NULL,
Rail_Road NVARCHAR(50) NULL,
Operator_In NVARCHAR(50) NULL,
Comments_In NVARCHAR(200) NULL,
Weight_In INT NOT NULL,
Gross_Weight_Notified INT NULL,
Tare_Weight_Notified INT NULL
)
CREATE TABLE dbo.InRoute_Train
(
InRoute_ID BIGINT PRIMARY KEY IDENTITY(1,1) NOT NULL,
Car_ID NVARCHAR(50) NOT NULL,
PO_Number NVARCHAR(30) NULL,
Vendor NVARCHAR(30) NULL,
Shipper NVARCHAR(30) NULL,
Commodity NVARCHAR(60) NULL,
Date_Notified DATETIME NOT NULL,
Rail_Road NVARCHAR(5) NULL,
Gross_Weight_Notified INT NULL,
Tare_Weight_Notified INT NULL
)
CREATE TABLE dbo.US_States
(
State_ID BIGINT PRIMARY KEY IDENTITY(1,1) NOT NULL,
State_Abbr NVARCHAR(2) NOT NULL,
State_Name NVARCHAR(100) NOT NULL
)
PRINT 'Add Tables'
END TRY
BEGIN CATCH
PRINT 'Failed Add Tables'
END CATCH
GO
-------END ADD TABLES------------------------------------------------------------------------------------------------
-------ADD CONSTRAINTS------------------------------------------------------------------------------------------------
BEGIN TRY
ALTER TABLE dbo.List_Vendors
ADD CONSTRAINT Vendor_ID PRIMARY KEY (Vendor_ID)
ALTER TABLE dbo.List_Rates
ADD CONSTRAINT Rec_ID PRIMARY KEY (Rec_ID)
ALTER TABLE dbo.List_Commodity
ADD CONSTRAINT Commodity_ID PRIMARY KEY (Commodity_ID)
--Pile_0_Management
ALTER TABLE dbo.LightWeight
ADD CONSTRAINT PK_ID PRIMARY KEY (PK_ID)
ALTER TABLE dbo.Pile_0_Management
ADD CONSTRAINT Rec_ID PRIMARY KEY (Rec_ID)
--Pile_1_Management
ALTER TABLE dbo.Pile_1_Management
ADD CONSTRAINT Rec_ID PRIMARY KEY (Rec_ID)
--Pile_MM_Management
ALTER TABLE dbo.Pile_MM_Management
ADD CONSTRAINT Rec_ID PRIMARY KEY (Rec_ID)
PRINT 'Add Constraints'
END TRY
BEGIN CATCH
PRINT 'Failed Add Constriants'
END CATCH
-------END ADD CONSTRAINTS--------------------------------------------------------------------
我解决了它。问题是,主键有时不是您在视觉上看到的主键 例如: 选择名称,键入描述 从sys.objects
其中parent_object_id=object_id(N'Pile_MM_Management') 没有人想通过阅读500行代码来找出您的问题。请展示仍然存在问题的代码的最低版本。此外,“抛出适合”并不是一个非常有用的描述。在删除旧pk之前,不能添加新pk。一个表不能有多个pk。