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

SP_MSForeachtable

Some times we need to query on the all the tables in one data base single statement. We use SP_MSForeachtable this is known as undocumented stored procedures . These all are system stored procedures. These stored procedures is place in Master database. NOTE: Please do not run all these queries in Production environment Example: create database UnDocumentedStoredProcedure use UnDocumentedStoredProcedure create table Emp ( ID int identity ( 1 , 1 ), Name varchar ( 50 ), Salary int ) insert into Emp ( Name , Salary ) values ( 'rakesh' , 8000 ),( 'raju' , 9000 ) create table Dept ( ID int identity ( 1 , 1 ), DeptName varchar ( 100 ) ) insert into Dept ( DeptName ) values ( 'CSE' ),( 'IT' ) We are created new database and also created some table with some dummy data. Select all tables data: exec sp_MSForeachtable 'select * from ?...

SET ROWCOUNT

Stop the processing after the number of rows has been affected. Example: Step-1: Create the Table and insert some sample data. CREATE TABLE STUDENT ( ID INT IDENTITY ( 1 , 1 ) PRIMARY KEY , STUDENTNAME VARCHAR ( 100 ) NOT NULL , LIVINGLOCATION VARCHAR ( 100 ) NULL ) INSERT INTO STUDENT ( STUDENTNAME , LIVINGLOCATION ) SELECT 'Rakesh' , 'Hyderabad' UNION ALL SELECT 'Raju' , 'Delhi' UNION ALL SELECT 'Madhu' , 'Hyderabad' UNION ALL SELECT 'Naresh' ,NULL UNION ALL SELECT 'Venaktesh' , 'Chennai' In above Insert Statement we inserted 5 sample records. Step-2: Using SET ROWCOUT SET ROWCOUNT 3 ; SELECT * FROM STUDENT ORDER BY ID DESC It will affected 3 rows after that processing has been stopped. Step-2: Using SET ROWCOUT 0 SET ROWCOUNT 0 ; SELECT * FROM STUDENT ORDER BY ID DESC ...