2012-01-16 61 views
9

可以說我有這樣的SQL語句:如何正常運行ALTER TABLE之後ALTER VIEW

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個語句之後,保留了舊的列長度。所以我下面的代碼添加到該文件的末尾:

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

,我得到的錯誤是

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

所以我的問題是,什麼是保證我的看法保留的最佳方式新的列長度?

回答

17

爲這一特定目的,使用sp_refreshview

exec sp_refreshview N'dbo.tbl' 
+0

是的,這工作得很好,謝謝你的信息! – Jason 2012-01-16 00:36:11

10

使用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 
+0

嗯......有趣。我不覺得這是重要的添加,但我也把PRINT語句。顯然,如果在它之前有任何PRINT語句,ALTER VIEW將無法工作。但除此之外,這項工作。感謝整體開發人員。 – Jason 2012-01-16 00:17:56

+5

這僅適用於SSMS和相關工具 - 「GO」不是Transact SQL關鍵字。 – 2012-01-16 00:23:12

+0

好點,@ todda.speot.is。 – 2012-01-16 02:05:45