0% found this document useful (0 votes)
41 views27 pages

Store Procedure

The document provides an overview of how to create stored procedures in SQL Server. It includes examples of creating basic stored procedures without parameters, with parameters, declaring variables, using control flow statements like loops and cursors, exception handling with TRY/CATCH blocks, and creating user-defined functions. The document covers the basic syntax for each concept and provides sample code to demonstrate their usage.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
41 views27 pages

Store Procedure

The document provides an overview of how to create stored procedures in SQL Server. It includes examples of creating basic stored procedures without parameters, with parameters, declaring variables, using control flow statements like loops and cursors, exception handling with TRY/CATCH blocks, and creating user-defined functions. The document covers the basic syntax for each concept and provides sample code to demonstrate their usage.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 27

Create Store Procedure Syntax

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:<Author,,Name>
-- Create date: <Create Date,,>
-- Description:<Description,,>
-- =============================================
CREATE PROCEDURE <Procedure_Name, sysname, ProcedureName>
-- Add the parameters for the stored procedure here
<@Param1, sysname, @p1> <Datatype_For_Param1, , int> =
<Default_Value_For_Param1, , 0>,
<@Param2, sysname, @p2> <Datatype_For_Param2, , int> =
<Default_Value_For_Param2, , 0>
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here


SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>
END
GO
Basic Syntax : Create Store Procedure

CREATE PROCEDURE myStoredProcedure


AS
SELECT * FROM [XX_Customer_Live].[dbo].[Staging_Location]
GO
Execute Store Procedure

EXEC myStoredProcedure;
Store Procedure : Parameter

ALTER PROCEDURE [dbo].[myStoredProcedure]


@p_LocCode VARCHAR(10)
AS
BEGIN
SELECT * FROM XX_Staging.[dbo].[Staging_Location]
where [Location Code] =@p_LocCode

END
GO
Execute Store Procedure with Parameter

EXEC myStoredProcedure 'wh01'


Store Procedure : Multi Parameters

ALTER PROCEDURE [dbo].[myStoredProcedure]


@p_LocCode VARCHAR(10),
@p_status int
AS
BEGIN
SELECT * FROM
XX_Staging.[dbo].[Staging_Location]
where [Location Code] =@p_LocCode
and [Status] =@p_status

END
Execute Store Procedure with Parameter

EXEC myStoredProcedure 'wh01',0


Store Procedure : Declare Variable & Assign Value

ALTER PROCEDURE [dbo].[myStoredProcedure]


@p_LocCode VARCHAR(10),
@p_status int
AS
BEGIN

declare @CountLoc decimal(20,2)


declare @sampleText varchar(20)
set @sampleText ='Hello World’

SELECT *FROM XX_Staging.[dbo].[Staging_Location] where [Location Code]


=@p_LocCode and [Status] =@p_status

SELECT @CountLoc=COUNT(*) FROM XX_Staging.[dbo].[Staging_Location]


PRINT 'Count Location:' +cast(@CountLoc as varchar(10));
print 'Sample Text:'+ @sampletext
END
Declare Table
ALTER PROCEDURE [dbo].[mySP_TempTable]
@pCountryVARCHAR(10)
AS
BEGIN

-- Declare Table
DECLARE @temp TABLE
(
RowID INT IDENTITY (1,1),
Name VARCHAR(50),
LastName VARCHAR(50),
Country VARCHAR(50)
)

-- Insert Table
INSERT INTO @temp (Name,LastName,Country) VALUES ('Wichit','Exsys',@pCountry)
INSERT INTO @temp (Name,LastName,Country) VALUES ('Parinya','Exsys',@pCountry)
INSERT INTO @temp (Name,LastName,Country) VALUES ('May','Exsys',@pCountry)

-- Return Rows
SELECT * FROM @temp

END
Declare Table

exec [mySP_TempTable] 'Thailand'


Control Flow :Loop

Create PROCEDURE [dbo].[mySP_Loop]


@pLimitRowINT
AS
BEGIN

DECLARE @i INT
SET @i = 1

WHILE (@i <= @pLimitRow)


BEGIN

PRINT + ' Row : ' + CONVERT(VARCHAR,@i)

SET @i = @i + 1
END -- WHILE

END
Declare Cursor

-- Declare cursor
DECLARE cursor_name CURSOR FOR
SELECT ... FROM table_name

-- Open cursor
OPEN cursor_name
FETCH NEXT FROM cursor_name
INTO ...

-- Loop From Cursor


WHILE (@@FETCH_STATUS = 0)
BEGIN

FETCH NEXT FROM cursor_name -- Fetch next cursor


INTO ....
END

-- Close cursor
CLOSE cursor_name ;
DEALLOCATE cursor_name ;
Declare Cursor ALTER PROCEDURE [dbo].[mySP_Cursor]
@p_LocCodeVARCHAR(10)
AS
BEGIN

-- Declare Variable
DECLARE @LocName VARCHAR(50)
DECLARE @LocStatus int

-- Declare cursor from select table 'Staging_Location'


DECLARE cursor_Loc CURSOR FOR
select
[Location Name]
,[Status]
FROM [XX_Staging].[dbo].[Staging_Location] where [Location Code]=@p_LocCode

-- Open Cursor
OPEN cursor_Loc
FETCH NEXT FROM cursor_Loc
INTO @LocName, @LocStatus;

-- Loop From Cursor


WHILE (@@FETCH_STATUS = 0)
BEGIN

-- Display
PRINT 'Location Name : ' + @LocName + ', Status : ' + cast(@LocStatus as
varchar(10))

FETCH NEXT FROM cursor_Loc -- Fetch next cursor


INTO @LocName, @LocStatus -- Next into variable
END

-- Close cursor
CLOSE cursor_Loc;
DEALLOCATE cursor_Loc;

END
IF.. ELSE

IF (Expression) IF (Expression)
BEGIN BEGIN
// Statement // Statement
END END
ELSE IF (Expression)
BEGIN
IF (Expression) // Statement
BEGIN END
// Statement ELSE
END BEGIN
ELSE IF (Expression) // Statement
BEGIN END
// Statement
END
TRY CATCH SYNTAX

BEGIN TRY
// Statement
END TRY
BEGIN CATCH
// Exception
END CATCH
TRY CATCH :Sample 1
CREATE PROCEDURE [dbo].[mySP_TryCath1]
@pOne DECIMAL(10,2),
@pTwo DECIMAL(10,2)
AS
BEGIN

BEGIN TRY
SELECT @pOne/@pTwo
END TRY
BEGIN CATCH
SELECT ERROR_NUMBER() AS ErrorNumber
,ERROR_SEVERITY() AS ErrorSeverity
,ERROR_STATE() AS ErrorState
,ERROR_PROCEDURE() AS ErrorProcedure
,ERROR_LINE() AS ErrorLine
,ERROR_MESSAGE() AS ErrorMessage;
END CATCH

END
TRY CATCH :Sample 2
CREATE PROCEDURE [dbo].[mySP_insertLocation]
@p_transactionNo bigint,
@p_LocCodevarchar(10),
@p_LocNameVARCHAR(50),
@p_Statusint,
@pResultint OUTPUT,
@pMessageVARCHAR(500) OUTPUT

AS
BEGIN

BEGIN TRY
-- insert Location
INSERT INTO [Staging_Location] VALUES
(@p_transactionNo,@p_LocCode,@p_LocName,@p_Status);
SET @pResult = @@ROWCOUNT;
SET @pMessage = 'Insert Data Successfully';
END TRY
BEGIN CATCH
SET @pResult = 0;
SELECT @pMessage = ERROR_MESSAGE();
END CATCH

END
TRY CATCH :Sample 2
DECLARE @pResult2 INT
DECLARE @pMessage2 VARCHAR(500)

EXEC mySP_insertLocation 4,'J001','Location


J',0,@pResult2 out ,@pMessage2 out

SELECT @pResult2 AS 'pResult',@pMessage2 AS 'pMessage'


TRY CATCH :Sample 2 Execute It Again !!
DECLARE@pResult INT,
@pMessage VARCHAR(500)

EXEC mySP_insertLocation 4,'J001','Location J',0,@pResult=@pResult


OUTPUT,@pMessage=@pMessage OUTPUT

SELECT@pResult AS 'pResult'
SELECT@pMessage AS 'pMessage'
Function Syntax

CREATE FUNCTION <Inline_Function_Name, sysname,


FunctionName>
(
-- Add the parameters for the function here
<@param1, sysname, @p1> <Data_Type_For_Param1,
, int>,
<@param2, sysname, @p2> <Data_Type_For_Param2,
, char>
)
RETURNS Data_Type
AS
BEGIN
-- Add the Return data
RETURN Variable
END
Function Sample

CREATE FUNCTION GetDiffAmount


(
@pAmount1 DECIMAL(18,2),
@pAmount2 DECIMAL(18,2)
)
RETURNS DECIMAL(18,2)
AS BEGIN
DECLARE @diffAmt DECIMAL(18,2)

SET @diffAmt = @pAmount1 - @pAmount2

RETURN @diffAmt
END
Function Sample

SELECT dbo.GetDiffAmount(2000, 500) As DiffAmt


TRANSACTION ,COMMIT,ROLLBACK

BEGIN TRANSACTION
BEGIN TRY

-- Statement 1

-- Statement 2

COMMIT
END TRY
BEGIN CATCH
ROLLBACK
END CATCH
TRANSACTION ,COMMIT,ROLLBACK Sample
create PROCEDURE [dbo].[mySP_insertLocation2]
@p_transactionNo bigint,
@p_LocCodevarchar(10),
@p_LocNameVARCHAR(50),
@p_Statusint,
@pResultint output,
@pMessageVARCHAR(500) OUTPUT

AS
BEGIN
BEGIN TRANSACTION
BEGIN TRY
-- insert Location
INSERT INTO [Staging_Location] VALUES
(@p_transactionNo,@p_LocCode,@p_LocName,@p_Status);

-- insert Location Again!!


INSERT INTO [Staging_Location] VALUES
(@p_transactionNo,@p_LocCode,@p_LocName,@p_Status);

SET @pResult = @@ROWCOUNT;


SET @pMessage = 'Insert Data Successfully';
COMMIT
END TRY
BEGIN CATCH
ROLLBACK
SET @pResult = 0;
SELECT @pMessage = ERROR_MESSAGE();
END CATCH

END
TRANSACTION ,COMMIT,ROLLBACK Sample

DECLARE @pResult INT,


@pMessage VARCHAR(500)

EXEC mySP_insertLocation2 5,'J001','Location J',0,@pResult=@pResult


OUTPUT,@pMessage=@pMessage OUTPUT

SELECT @pResult AS 'pResult'


SELECT @pMessage AS 'pMessage'
Sample Insert Select Query

insert into [XX_Navision_Live].[dbo].[Staging_Location]


(
[Transaction No]
,[Location Code]
,[Location Name]
,[Status]
)
select
[Transaction No]
,[Location Code]
,[Location Name]
,[Status]
FROM XX_Staging.[dbo].[Staging_Location] where Status =1
Batch =GUID or Time Miliesecond
Reference

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/language-elements-transact-
sql?view=sql-server-2017

You might also like