Skip to main content

CHECK CONSTRAINT WITH USER DEFINED FUNCTION


-- HERE IS THE SIMPLE DEMONSTRATION CHECK CONSTRAINT WITH USER DEFINED FUNCTION.

-- SENARIO : ONLY ONE STUDENT CAN JOIN THE AT A TIME . ALL STUDENTS CAN WAIT UNTILL THE JOINED STUDENT CAN INACTIVE.

-- CREATE FUNCTION
CREATE FUNCTION CHECK_StudentJoinSQLClass(@JOINED BIT)
RETURNS BIT
AS
BEGIN
IF(@JOINED=1 AND (SELECT COUNT(*) FROM StudentJoinSQLClass WHERE  JOINED=@JOINED)>1)
BEGIN
                 SET @JOINED=0 --FALSE
END
ELSE
BEGIN
                SET @JOINED=1 --TRUE
END
RETURN @JOINED
END


-- CREATE TABLE
 CREATE TABLE StudentJoinSQLClass
(
 ID INT IDENTITY(1,1),
 NAME VARCHAR(10),
 JOINED BIT  NOT NULL CHECK(DBO.CHECK_StudentJoinSQLClass(JOINED)=1)
)

--INSERT DATA
INSERT INTO StudentJoinSQLClass(NAME,JOINED) VALUES('RAKESH',0)

INSERT INTO StudentJoinSQLClass(NAME,JOINED) VALUES('RAVI',1)

--HERE WE ARE INSERTING RAJU RECORD WITH TRUE VALUE .IN THIS CASE WE GET ERROR ,BEACUSE OF WE HAVE ALREADY RAVI RECORD WITH TRUE VALUE.
INSERT INTO StudentJoinSQLClass(NAME,JOINED) VALUES('RAJU',1)

-- UPDATE RAKESH RECORD FALSE TO TRUE.HERE ALSO WE GET THE ERROR.
UPDATE StudentJoinSQLClass SET JOINED=0 WHERE ID=1

--HERE WE UPDATING THE RAVI RECORD TO FALSE.
UPDATE StudentJoinSQLClass SET JOINED=0 WHERE ID=2

--TRY TO INSERT RAVI RECORD ONCE AGAIN.HERE THE VALUE IS INSERTED SUCESSFULLY.BEACAUSE NO TRUE RECORDS EXISTED IN THE TABLE RIGTH NOW.
INSERT INTO StudentJoinSQLClass(NAME,JOINED) VALUES('RAJU',1)


SELECT * FROM StudentJoinSQLClass


DROP TABLE StudentJoinSQLClass

Comments

Post a Comment

Popular posts from this blog

Rank Functions in SQL SERVER

1 . ROW_NUMBER () OVER ( [PARTITION BY CLAUSE] < ORDER BY CLUASE >): Returns the sequantial number of a row within the a partition of result set at 1 for the first row of the each partition. 2. RANK () OVER ( [PARTITION BY CLAUSE] < ORDER BY CLUASE >): Returns rank for rows within the partition of result set. 3. DENSE_RANK () OVER ( [PARTITION BY CLAUSE] < ORDER BY CLUASE >): Returns rank for rows within the partition of result set.With out any gaps in the ranking. 4. NTILE ( INTEGER_EXPRESSION ) OVER ( [PARTITION BY CLAUSE] < ORDER BY CLUASE >): Distributes the rows in an ordered partition into a specified number of groups. Examples: --create Employee table create table Employee (                 EmpId int identity ( 1 , 1 ) primary key ,              ...

Difference between LEN and DATALENGTH

LEN: LEN function returns the number of characters in a variable .it also removes the trailing spaces and then then return the length. Example-1: DECLARE @Name VARCHAR ( 20 )= 'rakesh' SELECT LEN ( @Name ) as [len] Output: Example-2: DECLARE @Name VARCHAR ( 20 )= 'rakesh ' SELECT LEN ( @Name ) as [len] Output: When we observe above variable assigned 'rakesh ' string after that added 3 spaces . Len function removes trailing spaces not leading spaces. DATALENGTH : DATALENG function returns the number of bytes occupy in a variable .it also considered the spaces also. Example-1: DECLARE @Name VARCHAR ( 20 )= 'rakesh' SELECT DATALENGTH ( @Name ) as [DataLength] Output: Example-2: DECLARE @Name VARCHAR ( 20 )= ' rakesh ' SELECT DATALENGTH ( @Name ) as [DataLength] Output: In above example before ' r ' and after ...