sql-server - 如何从存储过程返回用户定义的表类型

标签 sql-server stored-procedures

我在 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;

关于sql-server - 如何从存储过程返回用户定义的表类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46213431/

相关文章:

MySQL存储过程创建用户

php - 使用存储过程在mysql中插入数组值

sql-server - Service Broker : Sys. Conversation_endpoints 在使用 With Cleanup 时填充 CO/CONVERSING 消息

SQL Server 错误 208 : Invalid object name 'Utils.dbo.ChangeLogging_DDLCommands'

sql-server - 加载 SSIS 包时出错

sql-server - T-SQL 按分隔符分割

mysql程序错误无法运行

php - 无法创建存储过程 mysql 可能是 if else 语法

sql-server - 从 SQL Server 2014 中的 db 获取对象列表时出错

sql - 如何在 SQL Server 中使用 JOIN 执行 UPDATE 语句?