Automatically generate stored procedures for databases (INSERT, UPDATE, DELETE)

xiaoxiao2021-03-06  15

View the original text, please click here

The following is some of the wonderful code:

Figure 1 generated T-SQL Script

IF EXISTS (SELECT * FROM sysobjects WHERE name = 'prApp_Order_Details_Update') DROP PROC prApp_Order_Details_UpdateGO-- Update a single record in Order_DetailsCREATE PROC prApp_Order_Details_Update @OrderID int, @ProductID int, @UnitPrice money, @Quantity smallint, @Discount realASUPDATE Order_DetailsSET UnitPrice = @ Unitprice, Quantity = @quantity, discount = @discountwhere orderid = @Orderidand productId = @ProductIDGO

Figure 3 UDF

Create function dbo.fntableColumninfo (@stablename varchar (128))

Returns Table

AS

Return

Select c.name as scolumnname,

C.colid as ncolumnid,

DBO.FNISCOLUMNPRIMARYKEY (@stablename, c.name) as bprimaryKeyColumn,

Case

When T.Name in ('char', 'varchar', 'binary', 'varbinary', 'nchar',

'nvarchar') THEN 1

When T.Name in ('Decimal', 'Numeric') THEN 2

ELSE 0

End as nalternateType,

C.Length As ncolumnlength,

C.PREC AS NCOLUMNPRECISION,

C.scale as ncolumnscale,

C.ISNULLABLE,

Sign (C.STATUS & 128) As ISIDENTITY,

T.Name As Stypename,

DBO.fncolumndefault (@stablename, c.name) AS SDEFAULTVALUE

From syscolumns c

Inner Join SystemYpes T on C.XTYPE = T.XTYPE AND

C.USERTYPE = T. IUSERTYPE

WHERE C.ID = Object_ID (@stablename)

Figure 4 set up the variables

CREATE PR__SYS_MAKEUPDATERECORDPROC

@stablename varchar (128),

@Bexecute bit = 0

AS

If DBO.FNTABLEHASPRIMARYKEY (@Stablename) = 0

Begin

Raiserror ('Procedure Cannot Be CREATED ON A Table with No Primary

Key. ', 10, 1) RETURN

End

Declare @sproctext varchar (8000),

@skeyfields varchar (2000),

@ssetclause varchar (2000),

@Swhereclause Varchar (2000),

@scolumnname varchar (128),

@ncolumnid smallint,

@BPrimaryKeyColumn bit,

@nalternateType Int,

@ncolumnLength Int,

@ncolumnPrecision Int,

@ncolumnscale int,

@Isnullable bit,

@IsIndentity Int,

@stypename varchar (128),

@SDefaultValue Varchar (4000),

@scrlf char (2),

@stab char (1)

Set @stab = char (9)

Set @scrlf = char (13) char (10)

Set @sproctext = ''

Set @skeyfields = ''

Set @ssetclause = ''

Set @SwhereClause = ''

Figure 5 Set Some Values

Set @sproctext = @sprocText 'IF exists (Select * from sysobjects

Where name = '' Prapp_ ' @stablename ' _Update ')' @scrlf

Set @sproctext = @sproctext @stab 'Drop Proc Prapp_'

@stablename '_Update' @scrlf

IF @bexecute = 0

Set @sproctext = @sproctext 'Go' @scrlf

Set @sproctext = @sproctext @scrlf

Print @sproctext

IF @bexecute = 1

Exec (@sproctext)

Set @sproctext = ''

Set @sproctext = @sproctext '-' @scrlf

Set @sproctext = @sproctext '- Update A Single Record in'

@Stablename @scrlf

Set @sproctext = @sproctext '-' @scrlf

Set @sproctext = @sprocText 'Create Proc Prapp_' @stablename '_ Update' @SCRLF

Figure 6 Declare Cursor and Read

Declare CRKEYFIELDS CURSOR for

SELECT *

From dbo.fntableColumnInfo (@stablename)

ORDER BY 2

Open crKeyfields

Fetch next

From crKeyfields

INTO @scolumnname, @ncolumnid, @BprimaryKeyColumn, @nalternatetype,

@ncolumnlength, @ncolumnprecision, @ncolumnscale, @isnullable,

@IsiDentity, @SDEFAULTVALUE

While (@@ fetch_status = 0)

Begin

Figure 7 crete the parameter list

IF (@skeyfields <> ')

Set @skeyfields = @skeyfields ',' @SCRLF

Set @skeyfields = @skeyfields @stab '@' @scolumnname '

' @stypename

IF (@nalternatetype = 2) -decimal, Numeric

Set @skeyfields = @skeyfields '(' Cast (@ncolumnprecision as

VARCHAR (3)) ',' Cast (@ncolumnscale as

VARCHAR (3)) ')') '

Else IF (@nalternatetype = 1) -character and binary

Set @skeyfields = @skeyfields '(' Cast (@ncolumnlength as

VARCHAR (4)) ')'

IF (@isiDentity = 0)

Begin

IF (@isnullable = 1) or (@stypename = 'TimeStamp')

Set @skeyfields = @skeyfields '= null'

End

Figure 8 Create The Set CLAUSE

IF (@BPrimaryKeyColumn = 0)

Begin

IF (@ssetclause = '')

Set @ssetclause = 'set'

Else

Set @ssetclause = @ssetclause ',' @scrlfset @ssetClause = @SSETCLASE @stab @scolumnname '='

Set @ssetclause = @ssetclause '@' @scolumnname

End

Figure 9 create the where, if neseary

Else

Begin

IF (@swhereclause = '')

Set @Swhereclause = @SwhereClause 'Where'

Else

Set @SwhereClause = @SwherecLaSe 'and'

Set @Swhereclause = @Swhereclause @stab @Scolumnname '= @'

@scolumnname @scrlf

End

Fetch next

From crKeyfields

INTO @scolumnname, @ncolumnid, @BprimaryKeyColumn, @nalternatetype,

@ncolumnlength, @ncolumnprecision, @ncolumnscale, @isnullable,

@IsiDentity, @SDEFAULTVALUE

End

Close Crkeyfields

Deallocate CRKEYFIELDS

Figure 10 Print The Procedure

Set @ssetclause = @ssetclause @scrlf

Set @sproctext = @sproctext @SKEYFIELDS @SCRLF

Set @sproctext = @sproctext 'as' @scrlf

Set @sproctext = @sproctext @scrlf

Set @sproctext = @sprocText 'Update' @stableName @scrlf

Set @sproctext = @sproctext @ssetclause

Set @sproctext = @sprocText @SwhereClause

Set @sproctext = @sproctext @scrlf

IF @bexecute = 0

Set @sproctext = @sproctext 'Go' @scrlf

Print @sproctext

IF @bexecute = 1exec (@sproctext)

© 2005 Microsoft Corporation. All Rights Reserved.

转载请注明原文地址:https://www.9cbs.com/read-48052.html

New Post(0)