Sql server 是否应在删除旧约束之前添加新约束

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-------------------------------------------------------------------------------

在删除原始约束之前,是否应该为主键添加新约束?我在删除约束时遇到问题。我想删除它并添加一个新的约束,但它抛出适合。这是代码。丢弃会抛出错误

Msg 3728,第16级,状态1,第1行“车辆ID\U名称”不是约束条件。 Msg 3727,第16级,状态0,第1行

无法删除约束。请参阅前面的错误

 ------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。