Store Procedure

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 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