我正在使用Sql Server 2014
CREATE TABLE [dbo].[Record](
[RecordId] [int] IDENTITY(1,1) NOT NULL,
[BookId] [int] NULL,
[TopicId] [int] NULL,
[BookName] [varchar](250) NULL,
[TopicName] [varchar](250) NULL,
[RecordPath] [varchar](250) NULL,
[RecordName] [varchar](250) NULL,
[DurationInSec] [float] NULL,
CONSTRAINT [PK_Record] PRIMARY KEY CLUSTERED
(
[RecordId] ASC
)
ALTER TABLE dbo.Record ADD CONSTRAINT DC_RecordPath DEFAULT
(CASE WHEN BookId = 1 THEN 'path/to/1' ELSE RecordPath END)
我想要一个带有条件的默认约束,但不允许这样做。 没有使用触发器有没有解决方法?
编辑:计算列无效,因为该列由少数存储过程填充。 我有两个条件;
BookId
为1,则RecordPath
为路径1 BookId
,RecordPath
RecordPath
来自存储过程答案 0 :(得分:0)
试试这个
ALTER TABLE dbo.Record ADD CONSTRAINT DC_RecordPath
CHECK ((CASE WHEN BookId = 1 THEN 'path/to/1' ELSE 'path/to/2' END)=RecordPath)
答案 1 :(得分:0)
可能违反条件是不允许的。但您可以使用CHECK选项执行相同的任务。您可以从here
找到帮助答案 2 :(得分:0)
如果您需要,只需选中CHECK (BookId = 1 AND RecordPath = 'path/to/1') OR (BookId != 1)
RecordPath = RecordPath
Esentialy这说:如果BookId等于1,那么路径必须是指定的路径,或者BookId可以是其他任何东西,对于那些记录,记录路径可以是任何东西。
第二部分不需要 TRUE
,因为它总是sdk.dir = C://Users//USERNAME//AppData//Local//Android//sdk
或者您想要计算默认值吗?
这是不可能的,DEFAULT约束不能依赖于其他列。要实现类似的功能,您需要使用TRIGGER,或者您可以使用计算列或视图,并在读取数据时使用应用程序中的列/视图。