在SQL server中创建具有if条件的列

在SQL server中创建具有if条件的列,sql,sql-server,Sql,Sql Server,我不确定在创建新列时是否可以使用条件语句 代码: /*现在,在默认值中,我想根据工作时间设置不同的费率。例如,如果工作小时数大于8,则比率为300,如果工作小时数小于8小时,则比率为200。)如何在sql server 2008中将此值作为默认值写入 我的第二个问题是: 为什么我这样写会出错 create table tbl_1( col_1 varchar(max) unique ) 错误是 Column 'col_1' in table 'tbl_1' is of a type that

我不确定在创建新列时是否可以使用条件语句

代码:

/*现在,在默认值中,我想根据工作时间设置不同的费率。例如,如果工作小时数大于8,则比率为300,如果工作小时数小于8小时,则比率为200。)如何在sql server 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
问候
Waqar

默认值不能引用任何其他列名。因此,费率的“默认”值将不知道工作小时数的值。您可以使用触发器或任何正在执行的操作来处理它,实际插入可能包含此逻辑


VARCHAR(MAX)
字段上只能使用
UNIQUE
约束。

可以使用计算列


你的第一个问题。你没有。默认值是列的默认值。它不是有条件的。您的第二个问题是,为什么您认为应该在varchar(max)上使用unique?那没有任何意义。如果varchar有一个限制,你可以使用unique,但是任何超过几个字符的东西都是荒谬的。好吧,我明白了。但是我有没有办法给速率添加条件。是的,这很荒谬,但是这个错误背后的原因是什么?原因是索引大小是900字节,一个varchar(max)可能需要更多。我有没有办法给速率添加条件,你可以将该列设为计算列,并且不允许用户差异@DourHighArch我打赌它已经完成了,这样它的一列就不需要添加到任何插入/更新中并自动计算了。@rajesh完美地回答了这个问题。
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
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 )