用户定义的前 1 行 Table 类型

top 1 row from User Defined Table Type

有没有办法从 'User Defined Table Type' select 前 1 行作为参数传递给存储过程?

CREATE TYPE t1 as TABLE
(
   id INT,
   name VARCHAR(100)
)

SP

CREATE STORED PROCEDURE sp1
(
    @type dbo.t1 as READONLY
)
BEGIN
   SELECT TOP 1 name FROM @type
END

有什么想法吗?

您的存储过程可能应该是这样的:

CREATE STORED PROCEDURE sp1
(
    @type dbo.t1 READONLY
)
BEGIN
   SELECT TOP 1 name 
   FROM @type t1
   ORDER BY id
END

备注:

  1. 我删除了 as 关键字
  2. 在不使用 ORDER BY 子句的情况下使用 TOP n 将 return 单行,但不能保证它是哪一行,因为数据库表本质上是未排序的。

查看下面的工作示例,其中详细说明了如何 CREATE/PASS/CALL 用户定义 Table 从 SP 键入。

用户定义Table类型创建脚本:

CREATE TYPE [dbo].[IdCenterIdList] AS TABLE(
    [Id] [varchar](36) NOT NULL,
    [CenterId] [varchar](36) NOT NULL
)

SP 创建:

CREATE PROCEDURE TestType
    @IdCenterIdList AS IdCenterIdList ReadOnly
AS
BEGIN
    SELECT 
        TOP(1) * 
    FROM @IdCenterIdList
END
GO

SP 执行语句:

DECLARE @tblTestType IdCenterIdList 

INSERT INTO @tblTestType VALUES('11','1111')
,('22','222')
,('33','333')

EXEC TestType @tblTestType

输出: