问题描述
更新:我现在驳回了此问题背后的想法,并主张采用其他设计。但是,给出的答案就目前的问题而言是一个很好的答案。我很高兴接受了。
我想在sql Server中实现与UNIQUE constraint相反的功能。
必须确保在新行的INSERT
上,已有的某个值已被重新用于特定的列(否则必须创建使用新值的行,请参见下面的注释):
INSERT INTO [dbo].[Item]
(/*...*/
[LogicalId])
VALUES
(/*...*/
123)
GO
如果LogicalId
的值不在现有值中,则必须失败。
由于此值来自SEQUENCE
,因此我尝试使用此CONSTRAINT
添加SEQUENCE
子句,如下所示:
ALTER TABLE Item
ADD CONSTRAINT chkInsertNonUniqueLogicalId
CHECK
(
( LogicalId <= (SELECT current_value FROM sys.sequences WHERE name = 'SQ_LogicalId') ) AND
( LogicalId >= (SELECT minimum_value FROM sys.sequences WHERE name = 'SQ_LogicalId') )
);
GO
但这会导致错误
使用INSERT
命令插入新行时,如何断言同一列上的现有值?
注意:应该使用NULL
插入应该具有新逻辑ID(尚未使用的值)的行,从而导致插入上述序列的DEFAULT
约束)。这样做的原因是拥有数据库控制(而非用户控制)的逻辑ID。
解决方法
当您以自己的方式描述它时,这似乎是一个奇怪的要求,但是,因为这是因为您从错误的角度看待它。您在这里所追求的肯定是外键约束,似乎您正在丢失包含外键的表。
因此,您需要创建所述表,然后创建外键约束。
user.model.ts:3:25 - error TS7016: Could not find a declaration file for module 'moment-timezone'. '/home/bunthai/sftp/upgrade/projectg/ui/ctr/node_modules/moment-timezone/index.js' implicitly has an 'any' type.
Try `npm install @types/moment-timezone` if it exists or add a new declaration (.d.ts) file containing `declare module 'moment-timezone';`
import * as moment from 'moment-timezone';
~~~~~~~~~~~~~~~~~