更改SQL Server中的列数据类型

时间:2017-05-21 11:24:54

标签: sql sql-server

我有一个表dbo.ExceptionMessage,现在我想将列数据类型从nvarchar(100)更改为nvarchar(250)

我使用alter查询来更改此

ALTER TABLE dbo.ExceptionMessage 
    ALTER COLUMN Address NVARCHAR(250)

并且在执行此查询时,我收到此错误:

  

对象'AddressView'依赖于列'Address'。   ALTER TABLE ALTER COLUMN Address失败,因为一个或多个对象访问此列。

我的数据库中有一个名为AdressView的视图,我在此AddressView中使用此地址列。

请帮忙

2 个答案:

答案 0 :(得分:1)

您的AddressView定义必须具有" WITH SCHEMABINDING" -

CREATE VIEW AddressView
    WITH SCHEMABINDING
AS
-- SELECT STATEMENTS
GO

您可以在ALTER VIEW语句中删除此子句 -

ALTER VIEW AddressView 
-- WITH SCHEMABINDING
AS
-- SELECT STATEMENTS
GO

理想情况下,在更改基表之后,您应该将" WITH SCHEMABINDING"再次在视图中。因为它会防止意外地改变基表。这应该可以帮助您解决问题。

答案 1 :(得分:0)

//如果你对该表有任何约束,那么首先删除

ALTER TABLE [dbo.ExceptionMessage] 
    DROP CONSTRAINT [CONSTRAINT_NAME];

ALTER TABLE dbo.ExceptionMessage 
    ALTER COLUMN Address NVARCHAR(250)

ALTER TABLE [dbo.ExceptionMessage] 
    ADD FOREIGN KEY (CONSTRAINT_NAME) 
        REFERENCES REFERENCE_TABLE_NAME(REFERENCE_COLUMN_NAME);