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:
- I Receive following error:
Msg 4145, Level 15, State 1, Line 21 An expression of non-boolean type specified in a context where a condition is expected, near ')'.
- This code should be normalized for update too though myself won't do update through my application, but maybe the future DB Admin which operate my application data, do something at some point.
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]))
UPDATE
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)