【发布时间】:2014-01-19 20:22:19
【问题描述】:
我是 SQL Server 2008 中表值参数的新手。我尝试使用查询创建用户定义表
USE [DB_user]
GO
CREATE TYPE [dbo].[ApproveAddsIds] AS TABLE(
[Ids] [bigint] NULL
)
GO
当我尝试在存储过程中使用表类型时
USE [DB_user]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create PROCEDURE [dbo].[GetTopTopic]
@dt [dbo].[ApproveAddsIds] READONLY
AS
BEGIN
END
我有两个错误_
@dt 的数据类型无效
参数@dt 不能声明为只读,因为它不是表值参数。
所以我试图找出这背后的原因,因为第一个查询已成功执行,我认为是因为权限,所以尝试了
GRANT EXEC ON TYPE::[schema].[typename] TO [User]
GO
但错误仍在继续,不知道这有什么问题。
当我将, 放在@dt [dbo].[ApproveAddsIds] READONLY 之后,上面的错误被删除并且现在错误出现在AS 上时,我注意到了一些奇怪的事情。当我为变量编写代码时,旧错误仍在继续。我认为这可能会有所帮助。
【问题讨论】:
-
Hmmmm... 无法重现 - 对我来说就像一个魅力。你(a)确定你总是在同一个服务器/同一个数据库上吗? (b) 你的存储过程中实际上有一个主体吗? (如果正文中没有任何语句,我会不断收到 'END' 附近的语法不正确)
-
@Are you sure you created the table type:
CREATE TYPE ... AS TABLE ...?基本上,错误信息告诉没有[dbo].[ApproveAddsIds]表类型。 -
@marc_s 我在同一台服务器/同一数据库上 n 尝试在正文中打印 hi 但错误继续。
-
@我也这么认为,但是表类型创建成功。
-
如果您在 SQL Server Management Studio 的对象资源管理器中检查您的数据库,请转到
Programmability > Types > User-Defined Table Types- 您在那里看到您的ApproveAddsIds表类型吗?
标签: sql sql-server database stored-procedures sql-types