Tuesday 10 April 2012

Auto generated SP with Parameters

 

When we are thinking about a procedure to insert data in a specified table, we must use all the columns name of the table as parameter to supply the value on the procedure.

Sometimes the table have a huge number of columns and the developer are bored to make parameters in all the columns and there data types and whether the columns is taking NULL or NOT NULL values.

In this article I am providing a simple stored procedure to generate a frame of stored procedure. My stored procedure takes two arguments. One is the SP name and another is the table name where we want to insert the data or make any operations.

The main thing is that it generates the parameters automatically from supplied table objects.

The Stored procedure is ready to use and you can enjoy it by just copy and paste.

IF EXISTS (SELECT *

           FROM   sysobjects

           WHERE  type = 'P'

                  AND name = 'up_RUN_SP_FRAME_CREATOR')

      BEGIN

            DROP  PROCEDURE  up_RUN_SP_FRAME_CREATOR

      END

GO

 

CREATE Procedure [dbo].[up_RUN_SP_FRAME_CREATOR]

      (

         @p_SPName  VARCHAR(30)  =  NULL,

         @p_TBLName VARCHAR(MAX) =  NULL

      )

AS

      DECLARE @sqlString       AS NVARCHAR(MAX)

      CREATE TABLE #Tbl

      (TblTxt VARCHAR(MAX))

BEGIN

        SET NOCOUNT ON;

       

        IF ISNULL(@p_SPName,'')='' OR ISNULL(@p_TBLName,'')=''

           BEGIN

               PRINT ('Please supply All the Parameters Value')

               GOTO WayOut

           END

       

        INSERT INTO #Tbl

        SELECT 'CREATE PROCEDURE '+ @p_SPName

        UNION ALL

        SELECT '('

        UNION ALL

        SELECT '@p_' + column_name + REPLICATE(' ', 40-LEN(column_name))

                       + data_type   + CASE WHEN data_type LIKE '%char' OR data_type LIKE '%binary'

                       THEN ' (' + CASE WHEN CONVERT(VARCHAR, CHARACTER_MAXIMUM_LENGTH) = '-1'

                       THEN 'max'

                        ELSE CONVERT(VARCHAR, CHARACTER_MAXIMUM_LENGTH)

                        END + ')'

                        WHEN data_type IN ('decimal', 'numeric')

                        THEN ' (' + CONVERT(VARCHAR, NUMERIC_PRECISION) + ', '

                       + CONVERT(VARCHAR, NUMERIC_SCALE) + ')'

                      WHEN data_type = 'float' THEN '(' + CONVERT(VARCHAR, NUMERIC_PRECISION) + ')'

                      ELSE ''

                      END

                      + CASE WHEN IS_NULLABLE = 'NO' THEN ' NOT' ELSE '' END + ' NULL'

        FROM   information_schema.columns

       WHERE  table_name = @P_TBLName

       UNION ALL

       SELECT ') AS WITH ENCRYPTION'

       UNION ALL

      SELECT 'DECLARE @....    <dataTypes>'

      UNION ALL

      SELECT 'DECLARE @....    <dataTypes>'

      UNION ALL

      SELECT 'DECLARE @....    <dataTypes>'

      UNION ALL

      SELECT 'BEGIN'

      UNION ALL

      SELECT '<Body.....>'

      UNION ALL

      SELECT 'END'

      SELECT * FROM #Tbl

WayOut:

END

 

GO

 

 

To run this stored procedure

 

EXEC up_RUN_SP_FRAME_CREATOR

     @p_SPName='my_Sp',

     @P_TBLName='my_Table'

 

Hope you like it.

 

Posted by: MR. JOYDEEP DAS

 

No comments:

Post a Comment