用户定义的前 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
备注:
- 我删除了
as
关键字
- 在不使用
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
输出:
有没有办法从 '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
备注:
- 我删除了
as
关键字 - 在不使用
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
输出: