在SQL Server中实现过程

时间:2015-10-19 21:03:17

标签: sql-server sql-server-2008 sql-server-2012

我收到了以下作业:

  1. 使用SQL Server中的参数setAccount@AccountNumber@CompanyName创建一个@BankName的过程

  2. 如果AccountNumberCompanyNameBankName已存在,请检查此过程。如果其中一个存在,则过程应返回数字0.如果它们都不存在,则过程应将数据插入相应的表中。请注意表Object

  3. 的作用

    其他重要信息是Counterparty可以是BankCompany

    可以使用此LINK下载数据库(.bak文件)。

    数据模型(使用Mgmt Studio生成)显示在此处:

    enter image description here

    我注意到(除了Account表)之外,表的定义使主键不会自动生成。请单独确认。

    这就是我完成程序的方法(RETURN命令没有返回0或1作为输出......):

    ALTER PROC setAccount 
    (
     @Kontonummer AS [varchar](255) = NULL
    ,@Firmenname AS [varchar](1000)
    ,@Bankname AS [varchar](255)
    ) 
    AS 
    BEGIN
        -- SET NOCOUNT ON
    
        DECLARE @FlagKontonummer AS SMALLINT
        DECLARE @FlagFirmenname AS SMALLINT
        DECLARE @FlagBankname AS SMALLINT
    
        SET @FlagKontonummer = (SELECT COUNT(*) 
                                FROM [dbo].[Bank] 
                                WHERE Bankname LIKE '%' + LTRIM(RTRIM(@Kontonummer)) + '%')
        SET @FlagFirmenname = (SELECT COUNT(*) 
                               FROM [dbo].[Bank] 
                               WHERE Bankname LIKE '%' + LTRIM(RTRIM(@Firmenname)) + '%')
        SET @FlagBankname = (SELECT COUNT(*) 
                             FROM [dbo].[Bank] 
                             WHERE Bankname LIKE '%' + LTRIM(RTRIM(@Bankname)) + '%')
    
    
        IF @FlagKontonummer > 0 OR @FlagFirmenname > 0 OR @FlagBankname > 0 
            RETURN 0
    
        IF (@FlagKontonummer = 0 AND @FlagFirmenname = 0 AND @FlagBankname = 0)
        BEGIN
            DECLARE @max_ob_ID AS INT
            DECLARE @p_company_id AS VARCHAR (MAX)
    
            SELECT @max_ob_ID = MAX(ObjectID) FROM [dbo].[Object]
    
            INSERT INTO [dbo].[Object] ([ObjectID]) VALUES (@max_ob_ID + 1)
    
            INSERT INTO [dbo].[Bank] (BankID, Bankname) 
            VALUES (@max_ob_ID + 1, LTRIM(RTRIM(@Bankname)))
    
            SELECT @max_ob_ID = MAX(ObjectID) FROM [dbo].[Object]
    
            INSERT INTO [dbo].[Object] ([ObjectID]) VALUES (@max_ob_ID + 1)
    
            INSERT INTO [dbo].[Company] (CompanyID, Companyname) 
            VALUES (@max_ob_ID + 1, LTRIM(RTRIM(@Firmenname)) )
    
            SELECT @p_company_id = CompanyID 
            FROM [dbo].[Company] 
            WHERE Companyname = LTRIM(RTRIM(@Firmenname))
    
            INSERT INTO [dbo].[Account] ([AccountNumber], [CompanyID], [CounterpartyID]) 
            VALUES (@Kontonummer, @p_company_id, 10  -- ??? **COUNTERPARTY** - which one ??? ---
            )
    
            RETURN 1
        END
    END
    

    主要问题是:基于给定的信息,是否可以确定正确的Counterparty?从我的角度来看,缺少这些信息,为了完成任务,必须提供额外的信息。

    这是正确的,还是我错过了什么?

    第二个问题是关于程序本身 - 你会写这个问题,还是有一个比我更优雅的解决方案?

0 个答案:

没有答案