Reputation: 2031
I want to let user to enter, only one entry of data with specific ReqNo
, that it's Type
is equal 'SS'. There are two issue:
Msg 4145, Level 15, State 1, Line 21 An expression of non-boolean type specified in a context where a condition is expected, near ')'.
List ENDS ( I add this line so the parser will start parsing the code, which otherwise it wouldn't )
CREATE FUNCTION dbo.ReqNoIsUniquePerReserve
(
@ReqNo AS BIGINT,
@Type AS CHAR
)
RETURNS BIT
AS
BEGIN
IF UPPER(@Type) = 'SS'
BEGIN
IF EXISTS (SELECT TOP 1 Id FROM dbo.LiaQueue WHERE @ReqNo = ReqNo)
RETURN 0;
ELSE
RETURN 1;
END
ELSE IF @ReqNo IS NOT NULL
BEGIN
IF EXISTS (SELECT TOP 1 ID FROM dbo.LiaQueue WHERE @ReqNo = ReqNo)
RETURN 1;
ELSE
RETURN 0;
END
RETURN 1;
END
ALTER TABLE dbo.LiaQueue
ADD CONSTRAINT CK_LiaQueue_ReqNo_Unique
CHECK (dbo.[ReqNoIsUniquePerReserve](ReqNo,[Type]))
USE [Liaison]
GO
/****** Object: UserDefinedFunction [dbo].[ReqNoIsUniquePerReserve] Script Date: 10/03/2016 12:48:18 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[ReqNoIsUniquePerReserve]
(
@Id AS BIGINT,
@Command AS NVARCHAR,
@ReqNo AS BIGINT
)
RETURNS BIT
AS
BEGIN
IF UPPER(@Command) = 'SS'
BEGIN
IF EXISTS (SELECT TOP 1 Id FROM dbo.LiaQueue WHERE @ReqNo = ReqNo AND Id <> @Id)
RETURN 0;
ELSE
RETURN 1;
END
ELSE IF @ReqNo IS NOT NULL
BEGIN
IF EXISTS (SELECT TOP 1 ID FROM dbo.LiaQueue WHERE @ReqNo = ReqNo)
RETURN 1;
ELSE
RETURN 0;
END
RETURN 1;
END
ALTER TABLE dbo.LiaQueue
ADD CONSTRAINT CK_LiaQueue_ReqNo_Unique
CHECK (dbo.[ReqNoIsUniquePerReserve](Id, Command, ReqNo) = 1)
Upvotes: 0
Views: 1196
Reputation: 3127
For 1)
Have you tried:
ALTER TABLE dbo.LiaQueue
ADD CONSTRAINT CK_LiaQueue_ReqNo_Unique
CHECK (dbo.[ReqNoIsUniquePerReserve](ReqNo,[Type]) = 1)
For 2), I'm not so sure what you mean.
Upvotes: 1