web-dev-qa-db-ja.com

ALTERTABLEの後にALTERVIEWを適切に実行する方法

私がこのSQLステートメントを持っているとしましょう:

ALTER TABLE dbo.[tbl] ALTER COLUMN col1 varchar(300)
ALTER TABLE dbo.[tbl] ALTER COLUMN col2 varchar(20)
ALTER TABLE dbo.[tbl] ALTER COLUMN col3 varchar(20)
ALTER TABLE dbo.[tbl] ALTER COLUMN col4 varchar(100)

これらのステートメントをファイル内に配置して、次々に実行します。 dbo。[tbl]を見ているVIEWもあります。上記の4つのステートメントを実行した後、VIEWは古い列の長さを保持していることに気付きました。そこで、ファイルの最後に次のコードを追加しました。

ALTER  VIEW [dbo].[tbl]
AS
SELECT col1, col2, col3, col4
FROM   dbo.[tbl]

私が得るエラーは

'ALTER VIEW' must be the first statement in a query batch

だから私の質問は、私のVIEWが新しい列の長さを保持することを保証するための最良の方法は何ですか?

13
Jason

この特定の目的には、 sp_refreshview

exec sp_refreshview N'dbo.tbl'
21
GSerg

GOステートメントを使用します。

ALTER TABLE dbo.[tbl] ALTER COLUMN col1 varchar(300)
ALTER TABLE dbo.[tbl] ALTER COLUMN col2 varchar(20)
ALTER TABLE dbo.[tbl] ALTER COLUMN col3 varchar(20)
ALTER TABLE dbo.[tbl] ALTER COLUMN col4 varchar(100)
GO

ALTER  VIEW [dbo].[tbl]
AS
SELECT col1, col2, col3, col4
FROM   dbo.[tbl]
GO
11