Хранимая процедура удаления записей с использованием пользовательского ввода (из родительской и дочерней таблицы) - PullRequest
0 голосов
/ 30 ноября 2011

Я на последней части этого задания, любая помощь будет благодарна, спасибо!

exec DeleteRecordWithUserInputCompanyName 'Costco'

Было бы сказано, что команда (ы) выполнена успешно, однако строки не были удалены.

Задача Хранимая процедура, которая позволит удалить клиента с указанием названия компании в качестве входных данных. Не оставляйте никаких «осиротевших» записей!

Мой код

Create Procedure DeleteRecordWithUserInputCompanyName @CompanyName varchar(50)as
--Get All Company names
Declare @@CompanyNames varchar(50)
select @@CompanyNames = Company from Customers
--Get CustomerNumber mathing the company name
Declare @@CustomerNumber char(4)
select @@CustomerNumber = CustomerNo from Customers where Company = @CompanyName
--Get Order Number mathing Customer Number
Declare @@OrderNumber int
select @@OrderNumber = OrderNo from Orders where CustomerNo = @@CustomerNumber
if (@@CompanyNames = @CompanyName)
Begin
ALTER TABLE Customers NOCHECK CONSTRAINT ALL
Delete from Customers where Company = @CompanyName
ALTER TABLE Customers CHECK CONSTRAINT ALL
Delete from Orders where CustomerNo = @@CustomerNumber
ALTER TABLE SalesDetail NOCHECK CONSTRAINT ALL  
Delete from SalesDetail where OrderNo = @@OrderNumber
ALTER TABLE SalesDetail CHECK CONSTRAINT ALL  
End

Таблицы

Create Table Customers
(
CustomerNo char(4) 
Constraint ck_CustomerNoHas4positionsWithNumbers
Check(CustomerNo like'[0-9],[0-9],[0-9],[0-9]'),
Company varchar(50) not null,
CustomerRep char(3),
CreditLimt money default(20000.00),
PRIMARY KEY(CustomerNo)
)

Create Table Orders
(
OrderNo int,
OrderDate Date not null,
CustomerNo char(4) not null,
SalesRep char(3) not null
PRIMARY KEY(OrderNo)
)

Create Table SalesDetail
(
SaleDetailID int,
ManufactureID char(3) Constraint ck_ManufactureIDFromSaleDetails check(ManufactureID like'[a-z],[a-z],[a-z]') not null,
ProductID char(5) Constraint ck_ProductIDSalesDetail check(ProductID like'[0-9],[0-9],[a-z],[a-z],[a-z]') not null,
OrderNo int,
qtyOrdered int
PRIMARY KEY(SaleDetailID)
)

1 Ответ

3 голосов
/ 30 ноября 2011
select @@CompanyNames = Company from Customers

после этого запроса @@CompanyNames Содержит последнюю компанию в таблице клиентов, из-за которой условие if возвращает false, следовательно, внутренний блок не выполняется Попробуйте это

Create Procedure DeleteRecordWithUserInputCompanyName @CompanyName varchar(50)as

Begin

--Delete Sale Detail First
Delete from SalesDetail where orderno in (select OrderNo from Orders where 
CustomerNo in (select CustomerNo from Customer where Company=@CompanyName))

--Delete From Orders Table
Delete from Orders where CustomerNo in (select CustomerNo from Customer where Company=@CompanyName)

--Delete Customers of that Company
Delete from Customer where Company=@companyName

End
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...