例として、この小さなスクリプトを検討してください
create table Customers
(CustomerId int not null
,StoreId int
,primary key(CustomerId)
)
go
create table Stores
(StoreId int
,StoreName varchar(50)
,primary key(StoreId)
)
go
alter table Customers
add foreign key (StoreId)
references Stores(StoreId)
go
insert into Stores
values (1,'Biggest Store')
,(2,'Mediumest Store')
,(3,'Smaller Store')
,(4,'Smallest Store')
go
insert into Customers
values
(1,1)
,(2,1)
,(3,2)
,(4,3)
,(5,4)
spUpdateCustomerInformation
2 つのパラメーターを取るストアド アップデートを使用するとします。1 つはCustomerId
ユーザーが更新したいストアの名前 (Stores テーブルの StoreName) です。したがって、Customers
テーブルのレコード(1,1)
は、顧客 1 が から何かを購入したことを意味しますBiggest Store
。ストアド プロシージャのように 2 つのパラメータをストアド プロシージャに渡したいと思い
spUpdateCustomerInformation 1,'Smallest Store'
ます。私の試み(1,1)
(1,4)
create proc spUpdateCustomerInformation
@CustomerId int
,@StoreName varchar(50)
as begin
update c
set c.StoreId = s.StoreId
from customers as c
inner join Stores as s
on s.StoreId = c.StoreId
where c.CustomerID = @CustomerId
and s.StoreName = @StoreName --failing here
end
更新された 0 行を返します。StoreId を 2 番目のパラメーターとしてストアド プロシージャに単純に渡すことができることはわかっていますが、StoreName
2 番目のパラメーターとして を渡して、この方法でそれを行うのがスマート/可能かどうか疑問に思っていました。これは不自然なシナリオではなくCustomerId
、パラメーターとしても渡す必要があることに注意してください。