Friday, May 15, 2015

HOW TO ADD IDENTITY PROPERTY TO THE EXISTING TABLE AND RESEED TO MAX

--we have data in that table then we follow below steps to add identity
--And also next inserted value should be resse to max+1

/*
A table without an IDENTITY column. 
We want to add the IDENTITY property to the Col1 column
*/
CREATE TABLE AddIdentity ( Col1 INT NOT NULL, Col2 VARCHAR(10) NOT NULL, CONSTRAINT pkAddIdentity PRIMARY KEY (Col1)
);
/*
A temporary table, with the schema identical to the AddIdentity table, 
except that the Col1 column has the IDENTITY property
*/
CREATE TABLE AddIdentityTemp ( Col1 INT NOT NULL IDENTITY(1,1), Col2 VARCHAR(10) NOT NULL, CONSTRAINT pkAddIdentityTemp PRIMARY KEY (Col1)
);
-- Insert test data INSERT INTO AddIdentity (Col1Col2) VALUES (1'a'); -- Switch data into temporary table ALTER TABLE AddIdentity SWITCH TO AddIdentityTemp; -- Look at the switched data SELECT Col1Col2 FROM AddIdentityTemp; -- Drop the original table, which is now empty DROP TABLE AddIdentity; -- Rename the temporary table, and all constraints, to match the original table EXEC sp_rename 'AddIdentityTemp''AddIdentity''OBJECT'; EXEC sp_rename 'pkAddIdentityTemp''pkAddIdentity''OBJECT'; -- Reseed the IDENTITY property to match the maximum value in Col1 DBCC CHECKIDENT (AddIdentityRESEED); -- Insert test data INSERT INTO AddIdentity (Col2) VALUES ('b'); -- Confirm that a new IDENTITY value has been generated SELECT Col1Col2 FROM AddIdentity



-------BY USING ALTER TO ADD IDENTITY TO THAT TABLE 

DECLARE @max_identity NVARCHAR(20)
DECLARE @SQL NVARCHAR(MAX)=''
SELECT @max_identity=ISNULL(MAX(responsys_complaint_id)+1,1) FROM Email.dbo.Responsys_Complaint
SET @SQL=@SQL+'ALTER TABLE Email.dbo.Responsys_Complaint ALTER COLUMN responsys_complaint_id IDENTITY(CAST('+@max_identity+' AS INT),1) NOT NULL'
PRINT @SQL
--EXEC(@SQL)

Tuesday, May 5, 2015

NEW DATACONVERSION FUNCTIONS IN SQL SERVER 2012

In 2008 we have only two types of data conversion functions are available

That are         1. cast()
                   2.convert()

1.cast():
       

Monday, April 20, 2015

ISNUMERIC() FUNCTION IN SQL SERVER WITH EXAMLPES

  • The ISNUMERIC function can be used for safe coding by checking the string data prior to CONVERT/CAST to numeric. The ISNUMERIC function as filter is important in data cleansing when internal/external feeds are loaded into the database or data warehouse. 
SYNTAX:

                 ISNUMERIC( expression )

Expression:
           expression is the value to test whether it is a numeric value.

Note:
  • The ISNUMERIC function returns 1, if the expression is a valid number.
  • The ISNUMERIC function returns 0, if the expression is NOT a valid number.
numeric datatypes:

  int,numeric,bigint,money,smallint,smallmoney,tinyint,float,decimal,real

SELECT ISNUMERIC('')------0.  This is understandable, but your logicmay                                              want    to default these to zero.
SELECT ISNUMERIC(' ')--0.  This is understandable, but your logic may want to default these to zero.


SELECT ISNUMERIC('%')--0.


SELECT ISNUMERIC('1%')--0.


SELECT ISNUMERIC('e')--0.
SELECT ISNUMERIC('  ')--1.  --Tab.
SELECT ISNUMERIC(CHAR(0x09))--1.  --Tab.
SELECT ISNUMERIC(',')--1.
SELECT ISNUMERIC('.')--1.
SELECT ISNUMERIC('-')--1.
SELECT ISNUMERIC('+')--1.
SELECT ISNUMERIC('$')--1.
SELECT ISNUMERIC('\')--1.  '
SELECT ISNUMERIC('e0')--1.
SELECT ISNUMERIC('100e-999')--1.  No SQL-Server datatype could hold this number, though it is real.
SELECT ISNUMERIC('3000000000')--1.  This is bigger than what an Int could hold, so code for these too.
SELECT ISNUMERIC('1234567890123456789012345678901234567890')--1.  Note: This is larger than what the biggest Decimal(38) can hold.
SELECT ISNUMERIC('- 1')--1.
SELECT ISNUMERIC('  1  ')--1.
SELECT ISNUMERIC('True')--0.
SELECT ISNUMERIC('1/2')--0.  No love for fractions.

EXAMPLES:


USE AdventureWorks2012;
GO
SELECT City, PostalCode
FROM Person.Address 
WHERE ISNUMERIC(PostalCode)<> 1;
GO
 
-- SQL Server ISNUMERIC & CASE quick usage examples - t sql isnumeric and case functions
-- T-SQL IsNumber, IsINT, IsMoney - filtering numeric data from text columns
SELECT ISNUMERIC('$12.09'), ISNUMERIC('12.09'), ISNUMERIC('$'),ISNUMERIC('Alpha')
--          1                 1                 1                             0
SELECT ISNUMERIC('-12.09'), ISNUMERIC('1209')ISNUMERIC('1.0e9'),ISNUMERIC('A001')
--          1                 1                 1                             0


---isnumeric() function with case 

SELECT   TOP (4) AddressID,
                   City,
                   PostalCode,
                   CASE
                     WHEN ISNUMERIC(PostalCode) = 1 THEN 'Y'
                     ELSE 'N'
                   END AS IsZipNumeric
FROM     AdventureWorks2008.Person.Address
ORDER BY NEWID()
/* AddressID   City           PostalCode  IsZipNumeric
27625       Santa Monica      90401       Y
23787       London            SE1 8HL     N
24776       El Cajon          92020       Y
22120       Wollongong        2500        Y    */
 
------------
-- SQL ISALPHANUMERIC check
------------
-- SQL not alphanumeric string test - sql patindex pattern matching
SELECT DISTINCT LastName
FROM   AdventureWorks.Person.Contact
WHERE  PATINDEX('%[^A-Za-z0-9]%',LastName) > 0
GO

/* Partial results

LastName
Mensa-Annan
Van Eaton
De Oliveira
*/
-- SQL ALPHANUMERIC test - isAlphaNumeric
SELECT DISTINCT LastName
FROM   AdventureWorks.Person.Contact
WHERE  PATINDEX('%[^A-Za-z0-9]%',LastName)= 0
GO
/* Partial results
LastName
Abbas
Abel
Abercrombie
*/

-- When left 3 characters satisfy isnumeric test, we convert to int
SELECT
  ProductName,
  QuntityInPackage=convert(int,left(QuantityPerUnit,3))
FROM Products
WHERE ISNUMERIC(left(QuantityPerUnit,3))=1
ORDER BY ProductName


-- Canadian & UK zipcodes would not be numeric - NULL also not numeric (function yields 0)
USE pubs;
SELECT
  Zip=zip,
  [Numeric = 1] = ISNUMERIC(zip)
FROM authors

------------
-- Using IsNumeric with IF...ELSE conditional construct
------------
DECLARE @StringNumber varchar(32)
SET @StringNumber = '12,000,000'
IF EXISTS( SELECT * WHERE ISNUMERIC(@StringNumber) = 1)
      PRINT 'VALID NUMBER: ' + @StringNumber
ELSE
    PRINT 'INVALID NUMBER: ' + @StringNumber
GO
-- Result: VALID NUMBER: 12,000,000

DECLARE @StringNumber varchar(32)
SET @StringNumber = '12-34'
IF EXISTS( SELECT * WHERE ISNUMERIC(@StringNumber) = 1)
      PRINT 'VALID NUMBER: ' + @StringNumber
ELSE
    PRINT 'INVALID NUMBER: ' + @StringNumber
GO


-- Result: INVALID NUMBER: 12-34

- Alternate numeric test with like
-- SQL zipcode test - SQL test numeric - SQL CASE function
SELECT   TOP 5 CompanyName,
               City=City+', '+Country,
               PostalCode,
               [IsNumeric] =
               CASE
                   WHEN PostalCode like '[0-9][0-9][0-9][0-9][0-9]'
                     THEN '5-Digit Numeric'
                   ELSE 'Not 5-Digit Numeric'
               END
FROM     Northwind.dbo.Suppliers
ORDER BY Newid()
GO
/* Results

CompanyName             City                    PostalCode        IsNumeric
Escargots Nouveaux      Montceau, France        71300 5-Digit     Numeric
Norske Meierier         Sandvika, Norway        1320  Not 5-Digit Numeric
Pavlova, Ltd.           Melbourne, Australia    3058  Not 5-Digit Numeric
Zaanse Snoepfabriek     Zaandam, Netherlands    9999 ZZ           Not 5-Digit Numeric
Exotic Liquids          London, UK              EC1 4SD           Not 5-Digit Numeric
*/




 

Monday, April 13, 2015

BASED ON PARTITION_ID VALUE TO DYNAMICALLY CHANGE DATABASE NAME IN SQL SERVER

                                                    

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_insert_Party_for_Form_mlp_stg]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[sp_insert_Party_for_Form_mlp_stg]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER OFF
GO   

    
CREATE PROCEDURE [dbo].[sp_insert_Party_for_Form_mlp_stg]
                     (@partition_id int)
                     --,@database_name VARCHAR(20))    
AS    
BEGIN    
BEGIN TRY    
SET NOCOUNT ON; 

  DECLARE @SQL NVARCHAR(4000) ='' 
  DECLARE @SQL_INSERT NVARCHAR(4000)=''
  DECLARE @database_name VARCHAR(20)

  SELECT @database_name=CASE WHEN @partition_id=1 THEN 'Multi_Line_Policy'
                             WHEN @partition_id=2 THEN 'Multi_Line_Policy_2'
                             WHEN @partition_id=3 THEN 'Multi_Line_Policy_3'
                             WHEN @partition_id=6 THEN 'Multi_Line_Policy_6'
                             END
   
SET @SQL=@SQL+'DELETE FROM  '+@database_name+'.dbo.[Party] WHERE EXISTS(SELECT 1 FROM 
                tempdb.dbo.tmp_Party_STG WHERE Party_id=[Party].Party_id)'

--PRINT @SQL
EXEC (@SQL)

SET @SQL_INSERT=@SQL_INSERT+'SET IDENTITY_INSERT '+@database_name+'.dbo.[Party] ON
                              INSERT INTO  '+@database_name+'.dbo.[Party](   party_id
                                                                            ,party_type_id
                                                                            ,created_date
                                                                            ,created_user
                                                                            ,modified_date
                                                                            ,modified_user
                                                                            ,valid_flag
                                                                              )
                                                                     SELECT   party_id
                                                                            ,party_type_id
                                                                            ,created_date
                                                                            ,created_user
                                                                            ,modified_date
                                                                            ,modified_user
                                                                            ,valid_flag
                                                                    FROM tempdb.dbo.tmp_Party_STG WITH(NOLOCK)
                                                    SET IDENTITY_INSERT '+@database_name+'.dbo.[Party] OFF'                                                      



  --print @SQL_INSERT

  EXEC (@SQL_INSERT)

  END TRY
    BEGIN CATCH
   
        DECLARE @ErrorMessage NVARCHAR(MAX),@ErrorNumber INT,@ErrorSeverity INT,@ErrorState INT
        SET @ErrorMessage = ERROR_MESSAGE()
        SET @ErrorNumber = ERROR_NUMBER()
        SET @ErrorSeverity = ERROR_SEVERITY()
        SET @ErrorState = ERROR_STATE()
       
        RAISERROR( @ErrorMessage,@ErrorSeverity,@ErrorState );    
   
    END CATCH
END   
   

Thursday, April 2, 2015

HOW TO SPLITE COMMA SEPERATED STRING AND INSERT INTO TEMP TABLE USING PROCEDURE

IF EXISTS (select * from dbo.sysobjects where id = object_id(N'[dbo].[splite_insert_into_table]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE [dbo].splite_insert_into_table
GO
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].splite_insert_into_table (@autostates_in_mlp NVARCHAR(4000))
AS
BEGIN

       DECLARE @OrderID varchar(10), @Pos int

    SET @autostates_in_mlp = LTRIM(RTRIM(@autostates_in_mlp))+ ','
    SET @Pos = CHARINDEX(',', @autostates_in_mlp, 1)
    --PRINT @autostates_in_mlp
    --PRINT @Pos


     IF OBJECT_ID('tempdb..#temp_auto_states_in_ML') IS NOT NULL
    DROP TABLE #temp_auto_states_in_ML

    CREATE TABLE #temp_auto_states_in_ML(state_cd CHAR(2))
    IF REPLACE(@autostates_in_mlp, ',', '') <> ''
    BEGIN
        WHILE( @Pos > 0)
        BEGIN
            SET @OrderID = LTRIM(RTRIM(LEFT(@autostates_in_mlp, @Pos - 1)))--WY
            IF @OrderID <> ''
            BEGIN
                INSERT INTO #temp_auto_states_in_ML (state_cd)
                VALUES (CAST( @OrderID AS VARCHAR(10))) --Use Appropriate conversion
            END
            SET @autostates_in_mlp = RIGHT(@autostates_in_mlp, LEN(@autostates_in_mlp) - @Pos)
            SET @Pos = CHARINDEX(',', @autostates_in_mlp, 1)

END
    SELECT * FROM  #temp_auto_states_in_ML
END

END

TESTING :
EXEC splite_insert_into_table @autostates_in_mlp='WY'
EXEC  splite_insert_into_table  @autostates_in_mlp='WY,NA,BA,NA'

--------------------another simple  way

DECLARE @autostates_in_mlp VARCHAR(256)
SET @autostates_in_mlp='WY,NA'
DECLARE @starting_position INT
   
     DECLARE @Previous_position INT

     SET @starting_position=1
     SET @Previous_position=1
      SET @autostates_in_mlp = LTRIM(RTRIM(@autostates_in_mlp))+ ','

      SELECT @starting_position= CHARINDEX(',',@autostates_in_mlp,@Previous_position)

    IF OBJECT_ID('tempdb..#temp_auto_states_in_ML') IS NOT NULL
    DROP TABLE #temp_auto_states_in_ML

    CREATE TABLE #temp_auto_states_in_ML(state_cd CHAR(2))


WHILE (@starting_position>0)
BEGIN
     INSERT INTO #temp_auto_states_in_ML(state_cd)
     SELECT SUBSTRING (@autostates_in_mlp,@Previous_position,@starting_position-@Previous_position)

     SET @Previous_position=@starting_position+1
     SELECT @starting_position = CHARINDEX (',',@autostates_in_mlp,@Previous_position)
END



           

Monday, March 16, 2015

SENARIO_2

My input table is like…………
Stuno Marks address
1001 1 US
1002 1 US
1003 1 UK
1004 1 UK
1005 2 LANDON
1006 2 LONDON
1007 3 BRAZAIL
1008 3 KENADA
MY OUPUT LIKE……………….
Stuno Marks address
1001 1 US
1003 1 UK
1005 2 LANDON
1007 3 BRAZAIL
1008 3 KENADA

ANS:
IF EXISTS(SELECT *FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='STU_DE')
 BEGIN
   DROP TABLE STU_DE
 END
CREATE TABLE STU_DE(STU_ID INT,MARKS INT,ADDR VARCHAR(50))

INSERT INTO STU_DE VALUES (1001,1,'US'),(1002,1,'US'),(1003,1,'UK')

INSERT INTO STU_DE VALUES (1004,1,'UK'),(1005,2,'LONDON'),(1006,2,'LONDON'),(1007,3,'BRAZAIL'),(1008,3,'KENADA')

SELECT STU_ID,MARKS,ADDR from(
select STU_ID,MARKS,ADDR, row_number() Over( partition by MARKS,ADDR order by STU_ID )R from STU_DE)a WHERE a.R =1 

;WITH CTE AS( SELECT STU_ID,MARKS,ADDR,ROW_NUMBER() OVER (PARTITION BY MARKS,ADDR ORDER BY STU_ID) AS ROW_NO FROM STU_DE)
SELECT STU_ID,MARKS,ADDR FROM CTE WHERE ROW_NO=1


Sunday, March 15, 2015

SIMPLE SENORIO_1

Inputs
--------
Column 1 Column 2
01-Jan-2015 20
02-Jan-2015 30
04-Jan-2015 40
05-Jan-2015 10
07-Jan-2015 10
Write a Query to Display All Input values (Column A & Column B) + All missing values without using any TEMP table.
Output Expected
-----------------------
Column 1 Column 2
01-Jan-2015 20
02-Jan-2015 30
03-Jan-2015 Null
04-Jan-2015 40
05-Jan-2015 10
06-Jan-2015 Null
07-Jan-2015 10

ANS:
if exists (select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME='sample_b')
begin
drop table sample_b
end
create table sample_b(column1 date,column2 int)

insert into sample_b values('01-Jan-2015',20),('02-Jan-2015',30),('04-Jan-2015',40),('05-Jan-2015',10),('07-Jan-2015',10)

declare @min_date date
 select @min_date=MIN(column1) from sample_b
--print @min_date
if object_id('tempdb..#tempe') is not null
begin
drop table #tempe
end

create table #tempe(dat date,id int)
declare @max_date date 
select @max_date=MAX(column1) from sample_b


declare @colummn int
--select @date

while (@min_date < = @max_date)
begin

   select @colummn=column2 from sample_b where column1= @min_date
insert into #tempe (dat,id)
select distinct  @min_date,@colummn 

 select @min_date=(select dateadd(dd,1,@min_date))

end
--select * from sample_b

select DISTINCT A.DAT,b.COLUMN2 from #tempe a
left join 
   sample_b b
   on b.column1=a.dat
   --where b.column2 is  null