2016-07-13 140 views
0

我得到一個錯誤,不正確的語法附近關鍵字「視圖」什麼創建此SQL Server視圖中的錯誤?

if object_id('my_view') is null 
BEGIN 
create view dbo.my_view as 
select * from dbo.my_table; 
END 
+0

另一種方法是有條件地放棄視圖(如果存在),然後創建不需要有條件,並且您將保證視圖的最新版本。根據小夥子的回答,選擇*不是一個好主意。 – StuartLC

+0

@StuartLC我當你設置爲用戶自定義的權限不推薦這種形式給出'DROP-CREATE'。當您刪除並重新創建時,您必須重新創建權限。 'CREATE-ALTER'更安全/更容易維護。 – lad2025

回答

3

語法表明它是SQL Server。你可以使用動態SQL:

IF OBJECT_ID('my_view') IS NULL 
BEGIN 
EXEC('CREATE VIEW dbo.my_view 
     AS 
     SELECT * 
     FROM dbo.my_table;'); 
END; 

LiveDemo

的一點是,CREATE VIEW

視圖只能在當前數據庫中創建。 的CREATE VIEW必須是查詢批次中的第一個語句。視圖可以最多1024列的有。

實現它的一種方法是使用Dynamic-SQL創建新的「上下文」,其中DDL是批量中的第一個語句。

此外,我強烈建議明確指定所有列。使用SELECT *是常見的反模式。

1

根據您做這樣的原因,你可能能夠做這種方式,這是我在過去使用:

if object_id('my_view') is null 
drop view my_view 
go 
create view dbo.my_view as 
select * from dbo.my_table; 
go 

你可能不是真的要刪除的視圖的一個理由或其他,但這對我來說也適用於類似的目標。

編輯:由@StuartLC Ninja'd,是不是要偷他的建議。