【发布时间】:2013-07-24 06:52:45
【问题描述】:
以这个小脚本为例
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 的存储更新
它采用两个参数:一个是CustomerId,另一个是用户希望更新的商店的名称(Stores 表中的 StoreName)。所以在Customers 表中,记录(1,1) 表示客户1 从Biggest Store 购买了东西。我想将两个参数传递给像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 作为第二个参数传递给存储过程,但我想知道这样做是否明智/可能,将 StoreName 作为第二个参数传递。假设这不是人为的场景,CustomerId 也必须作为参数传递。
【问题讨论】:
标签: sql sql-server sql-server-2008 tsql