有没有办法从用户定义的表类型'中选择前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
任何想法?
答案 0 :(得分:1)
您的存储过程应该是这样的:
CREATE STORED PROCEDURE sp1
(
@type dbo.t1 READONLY
)
BEGIN
SELECT TOP 1 name
FROM @type t1
ORDER BY id
END
注意:
as
关键字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
<强>输出:强>