生成简单的CRUD存储过程

问题描述 投票:2回答:2

我正在从事一个项目,该项目受有关SQL实现的某些公司标准的约束。具体来说,所有SQL Server内容都可以通过存储的proc only访问。 (无ORM或LINQ。)

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

所以,有人可以指出我可以用来生成大量所需过程的工具吗?最好是允许对过程进行一些自定义的方法,例如将语句包装在基本的BEGIN/END TRY结构中。

谢谢。

sql-server stored-procedures code-generation
2个回答
6
投票

SSMS Tools Pack中的[Mladen Prajdić]听起来很合适。您可以自定义其使用的模板。

反正值得尝试其他便利功能。


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

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

0
投票

如果正在寻找免费的解决方案,我正在使用Apex Sql Complete免费添加:https://solutioncenter.apexsql.com/how-to-create-and-use-crud-stored-procedures-in-sql-server/

© www.soinside.com 2019 - 2024. All rights reserved.