如何从存储过程
问题描述:
返回一个用户定义的表类型,我创建SQL Server中的用户定义的表类型:如何从存储过程
Create Type dbo.Car AS Table
(
CarNumber varchar(20) not null,
Model varchar(20) null
)
还有许多其他的领域有,这只是一个例子。
现在我有一个存储过程,我需要它从这种类型返回汽车列表。这是问题:我找不到从存储过程返回用户定义表类型的方法。
如果我在过程中声明它是一个参数,它必须是只读的,所以我不能给它赋值。如果我从这种类型声明var并尝试从它不允许的过程中返回它。
这里是我的尝试:
Create procedure getCarDetails
@carNumber varchar(20)
AS
BEGIN
SET NOCOUNT ON;
Declare @CarDetails AS dbo.Car
insert into @CarDetails (CarNumber,Model)
select CarNumber, Model
from cars
where cars.CarNumber = @carNumber
-- here I need to return the @CarDetails
-- if I try
-- return @CarDetails
-- It says 'must declare the scalar variable "@CarDetails"'
是什么做的正确方法吗?
答
你只是不能从存储过程返回表值变量。
如上所述,如果未声明为readonly
,则不能使用表值参数。
在您简单的情况下,你可以使用,而不是内嵌表值函数:
create function getCarDetails(@carNumber varchar(20))
returns table
as
return
select CarNumber, Model
from dbo.cars
where CarNumber = @carNumber;
你既可以只是选择,没有插入到这个'@ CarDetails'表或让你的插入,然后做到这一点:'从@ CarDetails中选择*。 –