我收到了以下作业:
使用SQL Server中的参数setAccount
,@AccountNumber
,@CompanyName
创建一个@BankName
的过程
如果AccountNumber
,CompanyName
或BankName
已存在,请检查此过程。如果其中一个存在,则过程应返回数字0.如果它们都不存在,则过程应将数据插入相应的表中。请注意表Object
其他重要信息是Counterparty
可以是Bank
和Company
。
可以使用此LINK下载数据库(.bak
文件)。
数据模型(使用Mgmt Studio生成)显示在此处:
我注意到(除了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
?从我的角度来看,缺少这些信息,为了完成任务,必须提供额外的信息。
这是正确的,还是我错过了什么?
第二个问题是关于程序本身 - 你会写这个问题,还是有一个比我更优雅的解决方案?