生成简单的CRUD存储过程

时间:2010-09-16 16:23:52

标签: sql-server stored-procedures code-generation

我正在开发一个符合某些与SQL实现相关的公司标准的项目。具体来说,所有SQL Server内容只能通过存储过程 访问。 (没有ORM或LINQ。)

我们需要的80%或更多可以通过基本的CRUD(CREATE,READ,UPDATE,DELETE)类型的过程来处理,该过程应该相当简单。但是,到目前为止,我找不到能够生成这些相当简单的“基本”存储过程的现有工具。

那么,有人能指出我可以用来生成大部分所需程序的工具吗?最好允许对流程进行一些自定义,例如将语句包装在基本的BEGIN/END TRY构造中。

感谢。

2 个答案:

答案 0 :(得分:6)

来自SSMS Tools Pack

Mladen Prajdić听起来可能符合该法案。您可以自定义它使用的模板。

无论如何,它的其他便利功能值得尝试。

答案 1 :(得分:3)

ssms工具包声称要执行此操作:http://www.ssmstoolspack.com/。示例代码:

USE [AdventureWorks];
GO

IF OBJECT_ID('[Person].[usp_AddressSelect]') IS NOT NULL
BEGIN 
    DROP PROC [Person].[usp_AddressSelect] 
END 
GO
CREATE PROC [Person].[usp_AddressSelect] 
    @AddressID INT
AS 
    SET NOCOUNT ON 
    SET XACT_ABORT ON  

    BEGIN TRAN

    SELECT [AddressID], [AddressLine1], [AddressLine2], [City], [StateProvinceID], [PostalCode], [rowguid], [ModifiedDate] 
    FROM   [Person].[Address] 
    WHERE  ([AddressID] = @AddressID OR @AddressID IS NULL) 

    COMMIT
GO
IF OBJECT_ID('[Person].[usp_AddressInsert]') IS NOT NULL
BEGIN 
    DROP PROC [Person].[usp_AddressInsert] 
END 
GO
CREATE PROC [Person].[usp_AddressInsert] 
    @AddressLine1 nvarchar(60),
    @AddressLine2 nvarchar(60),
    @City nvarchar(30),
    @StateProvinceID int,
    @PostalCode nvarchar(15),
    @rowguid uniqueidentifier,
    @ModifiedDate datetime
AS 
    SET NOCOUNT ON 
    SET XACT_ABORT ON  

    BEGIN TRAN

    INSERT INTO [Person].[Address] ([AddressLine1], [AddressLine2], [City], [StateProvinceID], [PostalCode], [rowguid], [ModifiedDate])
    SELECT @AddressLine1, @AddressLine2, @City, @StateProvinceID, @PostalCode, @rowguid, @ModifiedDate

    -- Begin Return Select <- do not remove
    SELECT [AddressID], [AddressLine1], [AddressLine2], [City], [StateProvinceID], [PostalCode], [rowguid], [ModifiedDate]
    FROM   [Person].[Address]
    WHERE  [AddressID] = SCOPE_IDENTITY()
    -- End Return Select <- do not remove

    COMMIT
GO
IF OBJECT_ID('[Person].[usp_AddressUpdate]') IS NOT NULL
BEGIN 
    DROP PROC [Person].[usp_AddressUpdate] 
END 
GO
CREATE PROC [Person].[usp_AddressUpdate] 
    @AddressID int,
    @AddressLine1 nvarchar(60),
    @AddressLine2 nvarchar(60),
    @City nvarchar(30),
    @StateProvinceID int,
    @PostalCode nvarchar(15),
    @rowguid uniqueidentifier,
    @ModifiedDate datetime
AS 
    SET NOCOUNT ON 
    SET XACT_ABORT ON  

    BEGIN TRAN

    UPDATE [Person].[Address]
    SET    [AddressLine1] = @AddressLine1, [AddressLine2] = @AddressLine2, [City] = @City, [StateProvinceID] = @StateProvinceID, [PostalCode] = @PostalCode, [rowguid] = @rowguid, [ModifiedDate] = @ModifiedDate
    WHERE  [AddressID] = @AddressID

    -- Begin Return Select <- do not remove
    SELECT [AddressID], [AddressLine1], [AddressLine2], [City], [StateProvinceID], [PostalCode], [rowguid], [ModifiedDate]
    FROM   [Person].[Address]
    WHERE  [AddressID] = @AddressID 
    -- End Return Select <- do not remove

    COMMIT TRAN
GO
IF OBJECT_ID('[Person].[usp_AddressDelete]') IS NOT NULL
BEGIN 
    DROP PROC [Person].[usp_AddressDelete] 
END 
GO
CREATE PROC [Person].[usp_AddressDelete] 
    @AddressID int
AS 
    SET NOCOUNT ON 
    SET XACT_ABORT ON  

    BEGIN TRAN

    DELETE
    FROM   [Person].[Address]
    WHERE  [AddressID] = @AddressID

    COMMIT
GO

----------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------