首页 > 解决方案 > 如何使用表类型上的字段?

问题描述

给定以下 SQL 用户定义的表类型:

CREATE TYPE IntegerIdTableType AS TABLE
(
    Id INT IDENTITY NOT NULL,
    PRIMARY KEY(Id)
);

Id当类型用作存储过程中的参数时,如何使用该字段,例如:

CREATE PROCEDURE FindPencilsForPencilCases
    @pencilCaseIds dbo.IntegerIdTableType READONLY
AS
BEGIN
    SELECT *
    FROM Pencils
    INNER JOIN @pencilCaseIds ON @pencilCaseIds.Id = Pencils.PencilCaseId
END

如果我只是运行,我可以运行上述内容,SELECT * FROM @pencilCaseIds但如果我引用该Id字段,则会得到以下异常:

Must declare the scalar variable "@pencilCaseIds".

标签: tsqlstored-procedures

解决方案


您需要为表值参数添加别名:

CREATE PROCEDURE FindPencilsForPencilCases
    @pencilCaseIds dbo.IntegerIdTableType READONLY
AS
BEGIN
    SELECT *
    FROM Pencils
    INNER JOIN @pencilCaseIds AS tvp 
        ON tvp.Id = Pencils.PencilCaseId
END

推荐阅读