2015-11-09 56 views
-1

創建視圖我想創建一個case語句裏面的觀點,但是SQL Server不允許它。這裏舉一個例子:SQL服務器:中箱

SELECT value, 
CASE value 
    WHEN 'value1' THEN (Create View as (Select ... From ... Where...)) 
    WHEN 'value1' THEN (Create View as (Select ... From ... Where...)) 
END 
FROM table 
WHERE table.parameter = 'some_parameter' 

有沒有人知道它爲什麼不起作用?提前致謝。

+0

標籤DBMS產品。 (Msql ???) – jarlh

+0

@jarlh msql server – bpesunny

+0

您的意思是MS SQL Server? – jarlh

回答

0

在T-SQL,這是MS SQL服務器的SQL味道,case聲明是爲了返回一個值,根據一定的條件。

如果你想在t-sql中引入分支邏輯,你可以使用ifelse

下面是一個例子,根據你的例子:

declare @Value varchar(128); 
select top 1 @Value = value from table where table.parameter = 'some_parameter'; 

if @Value = 'value1' 
begin 
    Create View as (Select ... From ... Where...); 
end 
else if @Value = 'value2' 
begin 
    Create View as (Select ... From ... Where...); 
end 

注:beginend塊是可選的,如果你只有在它一個說法。

+0

只有只有一個匹配'where'子句的記錄纔有效(不一定是這種情況)(因此,在分配@Value時可能需要添加TOP 1)。事實上,可能需要通過'where'條件的所有匹配循環。 –

2

你混合DDL和DML這裏。

CREATE VIEW是DDL(數據定義語言)和關心數據結構(表,視圖,存儲過程,觸發器,...)

,另一方面SELECT語句是DML(數據管理語言)並關心數據。您可以選擇,更新,插入或刪除數據。有些人甚至認爲SELECT甚至不是DML的一部分,因爲它不會改變數據。

不能使用SELECT調用DDL。 SELECT應該從你的表中獲取一些數據,而不是創建一個視圖或表。

你究竟想實現什麼?爲什麼你會想要基於單純的數據來改變你的數據結構?數據結構應該修復,只有數據本身應該被添加,更改或刪除。 (是的,您可能會不時調整數據結構,例如添加索引,因爲您發現應用程序中的數據訪問速度太慢,甚至無法更改表格並添加新列。可能需要添加一些視圖,因爲您正在尋找一種更方便的方式來選擇新應用程序中的數據,但所有這些都很少見。)

我現在唯一可以考慮的情況是,當你會有一個表格導致DDL會是這樣的:你是DBA並且開發了一個應用程序,在那裏開發人員輸入他們的DDL請求。然後你有一個應用程序運行在授權的條目上並執行相應的DDL。您可以在DBMS外部(C#中的應用程序,Java或任何從數據庫中選擇數據,構建DDL語句並讓它們執行)或DBMS內部的存儲過程構建動態DDL語句。使用

+0

我有一個程序,根據tableA的參數(這個參數是一個存儲爲表中的字符串的列),應該創建一個視圖與這個列。根據參數,應該創建不同的視圖 – bpesunny

+0

然後按照我的說法,檢索參數,構建創建視圖語句並讓它運行。我只是說,從*程序創建視圖非常非常罕見。這是一個很少需要的操作,因此通常只需手動操作即可。 –