第二次编辑:所涉及功能的源代码如下:
ALTER FUNCTION [Fileserver].[fn_CheckSingleFileSource] ( @fileId INT )
RETURNS INT
AS
BEGIN
-- Declare the return variable here
DECLARE @sourceCount INT ;
-- Add the T-SQL statements to compute the return value here
SELECT @sourceCount = COUNT(*)
FROM Fileserver.FileUri
WHERE FileId = @fileId
AND FileUriTypeId = Fileserver.fn_Const_SourceFileUriTypeId() ;
-- Return the result of the function
RETURN @sourceCount ;
END
编辑:示例表是一个简化。我需要它作为 Scaler Function / CHECK CONSTRAINT 操作。现实世界的安排并不是那么简单。
原始问题:假设下表名为 FileUri
FileUriId、FileId、FileTypeId
我需要编写一个检查约束,使得 FileId 对于 FileTypeId 为 1 是唯一的。您可以根据需要插入相同的 FileId,但只能插入 FileTypeId 为 1 的一行。
不起作用的方法:
1) dbo.fn_CheckFileTypeId 返回具有以下逻辑的 INT: SELECT Count(FileId) FROM FileUri WHERE FileTypeId = 1
2)ALTER TABLE FileUri ADD CONSTRAINT CK_FileUri_FileTypeId CHECK dbo.fn_CheckFileTypeId(FileId) <= 1
当我插入 FileId 1, FileTypeId 1 两次时,允许第二次插入。
谢谢!