2014-10-02 31 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