用户定义表类型的前1行

时间:2016-09-24 14:18:21

标签: sql-server user-defined-types

有没有办法从用户定义的表类型'中选择前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

任何想法?

2 个答案:

答案 0 :(得分:1)

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

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

注意:

  1. 我删除了as关键字
  2. 在不使用TOP n子句的情况下使用ORDER BY将返回单行,但无法保证它将是什么行,因为数据库表本质上没有排序。

答案 1 :(得分:1)

请看下面的工作示例,它提供了有关如何从SP CREATE/PASS/CALL用户定义表类型的详细信息。

用户定义的表格类型创建脚本:

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

<强>输出:

enter image description here