【问题标题】:Generating simple CRUD stored procs生成简单的 CRUD 存储过程
【发布时间】:2011-04-13 07:41:17
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

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


【解决方案1】:

来自Mladen PrajdićSSMS Tools Pack 听起来可能符合要求。您可以自定义它使用的模板。

它的其他便利功能还是值得一试的。

【讨论】:

  • 谢谢。我很困惑为什么我在搜索时没有出现。我只发现了几篇不太符合要求的 CodeProject 文章。
  • google.com/… - 第三个结果。
  • 太棒了!如果您不使用 SSMS 2012,它看起来是免费的,我使用的是 2008R2,所以我很高兴(不是说它非常昂贵)。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2012-07-25
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多