2014-10-02 28 views
1

我不确定在创建新列时是否可以使用条件语句。在SQL服务器中创建一个if条件的列

代码:

create table Employees(
Emp_ID int primary key identity (1,1), 
Hours_worked int, 
Rate int default '') 

/*现在在这里我想设置取决于工作时间不同速率的默认值。一样,如果工作时间不超过8则率为300,如果工作时间不超过8小时,价格为200)如何写为SQL Server中的Default值2008

我的第二个问题是:

为什么我得到错误,如果我这样写,

create table tbl_1(
col_1 varchar(max) unique 
) 

的错误是

Column 'col_1' in table 'tbl_1' is of a type that is invalid for use as a key column in an index. 
Msg 1750, Level 16, State 0, Line 1 

Registers Waqar

+0

你的第一个问题。你没有。默认值是列的默认值。这不是有条件的。你的第二个问题,你为什么会认为你应该在varchar(max)上使用唯一的?这没有任何意义。你可以使用唯一的,如果varchar有限制,但任何超过几个字符是荒谬的无论如何。 – 2014-10-02 19:14:34

+0

好吧,我明白了。但是有没有什么办法可以为费率增加条件。这是荒谬的,但是这个错误背后的原因是什么? – 2014-10-02 19:16:20

+3

原因是索引大小是900个字节,而varchar(max)可能比这个大得多。 – 2014-10-02 19:17:29

回答

1

可以使用计算列,http://msdn.microsoft.com/en-us/library/ms191250.aspx

create table Employees(
Emp_ID int primary key identity (1,1), 
Hours_worked int, 
Rate as (case when Hours_worked > 8 then 300 else 200 end) persisted) 
+0

先生,它像一个魅力工作..谢谢 – 2014-10-02 19:31:20

1

默认值不能引用任何其他列名称。所以Rate的“默认”值不会知道Hours_worked的值。你可以用一个触发器来处理它,或者做任何实际的插入都可以包含这个逻辑。

http://msdn.microsoft.com/en-us/library/ms173565(v=sql.100).aspx

你不能不在VARCHAR(MAX)领域UNIQUE约束。

+0

@rajesh完美地回答了这个问题。 – 2014-10-02 19:32:20