Translate

Saturday 21 July 2018

sql merged OR merge statement , use while bulk data is updated

Instead of using cursor use Merged statement for better performance.

Here is an sample code

 CREATE DATABASE PABITRA_MERGE_DB;

 USE PABITRA_MERGE_DB;

CREATE TABLE dbo.TargetTableToUpdate  -- target
(
 Id INT PRIMARY KEY,
 TName VARCHAR(20),
 City varchar(50),
 TotalCount INT
);
CREATE TABLE dbo.SourceTableTobeMatched  -- source
(
 Id INT,
 SName VARCHAR(20),
 City varchar(50)

);

INSERT TargetTableToUpdate VALUES
  (1, 'PABITRA','USA', 0),
  (2, 'ARYA', 'BHUBANESWAR', 0),
  (3, 'BRAJA','BANGALORE', 0),
  (5, 'MICROSOFT','MICROSOFT COP', 0),
  (6, 'GOOGLE','GOOGLE COP', 0),
  (8, 'YAHOO','YAHOO COP', 0);

INSERT SourceTableTobeMatched VALUES
  (1, 'PABITRA','USA'),
  (2, 'PABITRA', 'BHUBANESWAR'),
  (3, 'PABITRA','BANGALORE'),
  (4, 'ARYA','MICROSOFT COP'),
  (5, 'ARYA','GOOGLE COP'),
  (6, 'BRAJA','YAHOO COP')



  MERGE TargetTableToUpdate T
USING SourceTableTobeMatched S
ON T.ID = S.ID
WHEN MATCHED THEN
  UPDATE
  SET T.TotalCount =T.TotalCount+1;

  SELECT * FROM TargetTableToUpdate;
  SELECT * FROM SourceTableTobeMatched;

Wednesday 11 July 2018

Friday 6 July 2018

SQL GENERATE MAX ID OF A MIXED ID I.E. CHARATER WITH NUMBER






CREATE TABLE [dbo].[Mst_Emp](
[Emp_Id] [VARCHAR](10) NOT NULL PRIMARY KEY,
[CountryId] [int] NULL,
[StateId] [int] NULL,
[CityId] [int] NULL,
[Fst_Name] [varchar](50) NULL,
[Lst_Name] [varchar](50) NULL,
[Email] [varchar](50) NULL,
[Gender] [varchar](50) NULL,
[D_O_B] [datetime] NULL,
[Password] [varchar](50) NULL,
[CPassword] [varchar](50) NULL,
[Image] [varchar](max) NULL)

CREATE PROCEDURE USP_Mst_Emp
(
@ACTION VARCHAR(50)
)
AS BEGIN  --BEGIN OF PROC
IF(@ACTION='GET_MAX_ID')
BEGIN --BEGIN OF IF
   DECLARE @EMP_MAX VARCHAR(9),@MAX INT,@SETMAX VARCHAR(10),@Emp_Id VARCHAR(10)
          IF EXISTS(SELECT 1 FROM Mst_Emp)
            BEGIN
             SELECT @EMP_MAX=RIGHT(MAX(ISNULL(Emp_Id,'')),3) FROM Mst_Emp
                 SET @MAX=CONVERT(INT,@EMP_MAX)+1;
                 SET @SETMAX=CONVERT(VARCHAR,@MAX);
                 IF(LEN(@SETMAX)=1)
                  SET @Emp_Id='E00'+@SETMAX;
                 IF(LEN(@SETMAX)=2)
                   SET @Emp_Id='E0'+@SETMAX;
                 IF(LEN(@SETMAX)=3)
                   SET @Emp_Id='E'+@SETMAX;
            END
             ELSE
              BEGIN
               SET @Emp_Id=+'E001';
             END
   SELECT  @Emp_Id AS 'MAX_ID'
END --END OF IF


END--END OF PROCEDURE


--EXECUTING THE PROCEDURE
EXEC USP_Mst_Emp 'GET_MAX_ID'


GOVT EMPLOYEE RETIREMENT IN SQL QUERY



SELECT CONVERT(VARCHAR,DOB,103) AS DOB,CONVERT(VARCHAR,(SELECT RETIREDATE FROM GOVT_EMP_RETIREMENT(DOB)),103) RETIREDATE,
(SELECT RETIRESTATUS FROM GOVT_EMP_RETIREMENT(DOB)) RTDSTS
FROM TBL_EMPLOYEE

CREATE FUNCTION [dbo].[GOVT_EMP_RETIREMENT]
(
@PDOB DATETIME
)
RETURNS
@TBLRETIRESTS TABLE
(
RETIREDATE DATETIME,
RETIRESTATUS VARCHAR(16)
)
AS
BEGIN

INSERT INTO @TBLRETIRESTS
SELECT CASE WHEN ((DAY(DATEADD(yy,60,@PDOB)))> 1) THEN DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,(DATEADD(yy,60,@PDOB)))+1,0)) ELSE DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,(DATEADD(month,-1,(DATEADD(yy,60,@PDOB)))))+1,0)) END 'RETIREMENT DATE'
,CASE WHEN ((DAY(DATEADD(yy,60,@PDOB)))> 1) THEN
CASE WHEN DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,(DATEADD(yy,60,@PDOB)))+1,0)) > GETDATE() THEN 'Blue' ELSE 'RED' END
ELSE
CASE WHEN DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,(DATEADD(month,-1,(DATEADD(yy,60,@PDOB)))))+1,0)) > GETDATE() THEN 'Blue' ELSE 'RED' END END 'RTD STATUS'
RETURN
END