2012-01-16 29 views
9

phép nói rằng tôi có SQL này tuyên bố:Làm thế nào để chạy đúng ALTER XEM sau ALTER TABLE

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) 

Tôi đã đưa các báo cáo bên trong một tập tin được chạy một sau khi khác. Tôi cũng có một VIEW đang xem dbo. [Tbl]. Tôi nhận thấy rằng sau khi chạy 4 câu lệnh trên VIEW vẫn giữ độ dài cột cũ. Vì vậy, tôi đã thêm đoạn mã sau vào cuối file:

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

Các lỗi mà tôi nhận được là

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

Vì vậy, câu hỏi của tôi là, cách tốt nhất để đảm bảo rằng quan điểm của tôi vẫn giữ được là những gì độ dài cột mới?

Trả lời

17

Đối với mục đích cụ thể này, sử dụng sp_refreshview.

exec sp_refreshview N'dbo.tbl' 
+0

Vâng, điều này cũng được thực hiện, cảm ơn thông tin! – Jason

10

Sử dụng GO báo cáo:

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

Hmm ... thú vị. Tôi không nghĩ rằng nó là quan trọng để thêm nhưng tôi đặt báo cáo IN trong đó cũng có. Dường như, ALTER VIEW sẽ không hoạt động nếu có bất kỳ câu lệnh PRINT nào trước đó. Nhưng nếu không, công việc này. Cảm ơn nhà phát triển toàn diện. – Jason

+5

Điều này chỉ hoạt động trong SSMS và các công cụ liên quan - 'GO' không phải là từ khóa Giao dịch SQL. –

+0

Điểm tốt, @ todda.speot.is. –

Các vấn đề liên quan