2015-11-09 25 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

然后按照我的说法,检索参数,构建创建视图语句并让它运行。我只是说,从*程序创建视图非常非常罕见。这是一个很少需要的操作,因此通常只需手动操作即可。 –