Saturday, 1 August 2015

Cursor To insert comma seprated value to table

No comments
SP :

CREATE PROCEDURE spCursor  
(
    @Name VARCHAR(250),   
)
AS
BEGIN
    DECLARE @lReturnCode INT
    DECLARE @lErrorCode INT
 
//declare temporary table
DECLARE @tempCursor Table (
        Name  Varchar(250)
        )

    SET NOCOUNT ON
    SELECT @lErrorCode = 0

//fnSplitIntoTable is function used to convert string to rows by seperating with commas 

BEGIN


    INSERT INTO @tempCursor
        SELECT  vcValuesList as 'CursorName' FROM fnSplitIntoTable(@Name ,',') 
   
        DECLARE @NameToPass VARCHAR(MAX)
        DECLARE cur4Name CURSOR FOR
        SELECT Name from @tempCursor

        OPEN   cur4Name

        FETCH NEXT FROM cur4Name INTO @NameToPass
         WHILE @@FETCH_STATUS = 0
            BEGIN
                SELECT @lReturnCode = 1                
                        BEGIN       
                            INSERT INTO YourTable(Name) VALUES (@NameToPass)
                        END
   
                    SELECT @lErrorCode = @@ERROR
                    IF @lErrorCode != 0 GOTO ErrorHandler
           
                     -- If we get here, no Error occurred
                    SELECT @lReturnCode = 0                 

                  --print @NameToPass
                 FETCH NEXT FROM cur4Name INTO @NameToPass
             END
             CLOSE cur4Name
             DEALLOCATE cur4Name
                        
    END
    -- On success, returns 0 as lReturnCode and inserted data
   
   
    -- Error Handler returns the return code

    ErrorHandler:

    SET NOCOUNT OFF

    SELECT 'lReturnCode'=@lReturnCode, 'lErrorCode'=@lErrorCode

    RETURN
END







Function To Split Comma To Rows :


CREATE FUNCTION [dbo].[fnSplitIntoTable] (@vcInString VARCHAR(MAX), @cDELIMITER CHAR(1))
RETURNS @OutTable TABLE (vcValuesList VARCHAR(255))
AS
BEGIN
DECLARE @pos INT
SET @vcInString = RTRIM(LTRIM(@vcInString))
SET @pos = CHARINDEX(@cDELIMITER,@vcInString,1)
WHILE @pos <> 0
BEGIN
INSERT INTO @OutTable
SELECT LTRIM(RTRIM(LEFT(@vcInString,@pos-1)))
SET @vcInString = SUBSTRING(@vcInString,@pos+1,LEN(@vcInString))
SET @pos = CHARINDEX(@cDELIMITER,@vcInString,1)
END
INSERT INTO @OutTable
SELECT RTRIM(LTRIM(@vcInString))
RETURN
END