tsql - 如何使用表类型上的字段?
问题描述
给定以下 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".
解决方案
您需要为表值参数添加别名:
CREATE PROCEDURE FindPencilsForPencilCases
@pencilCaseIds dbo.IntegerIdTableType READONLY
AS
BEGIN
SELECT *
FROM Pencils
INNER JOIN @pencilCaseIds AS tvp
ON tvp.Id = Pencils.PencilCaseId
END
推荐阅读
- unit-testing - 具有类和其他属性的模拟模块
- go - 在 goroutine 中使用 cmd.Command 启动 Web 服务器,应用程序终止时进程不会关闭
- java - 替代 REST 的 ProtoBuff 编码?
- javascript - 当所有数据都准备好时加载组件
- python - python子进程在systemctl启动时找不到shell命令
- python-3.x - TensorFlow 服务和客户端调用失败
- javascript - 无法将 figcaption 附加到图形(均由 createElement 创建)无法在“节点”上执行“附加孩子”
- javascript - Alexa 技能导致回声点变得无响应
- php - 为什么我在尝试访问“$comment->users->username”时收到“尝试获取非对象的属性 'username'”?
- java - Javafx TableView 无法显示任何内容,但没有错误地遵守?