使用用户定义的表类型时,数据类型无效

Hot*_*tud 4 sql database sql-server stored-procedures sql-types

我是SQL Server 2008中的表值参数的新手.我试图用查询创建用户定义的表

USE [DB_user]
GO
CREATE TYPE [dbo].[ApproveAddsIds] AS TABLE(
    [Ids] [bigint] NULL
)
GO 
Run Code Online (Sandbox Code Playgroud)

当我尝试在存储过程中使用表类型时

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
Run Code Online (Sandbox Code Playgroud)

我有两个错误_

@dt具有无效的数据类型
参数@dt不能被声明为只读,因为它不是表值参数.

所以我试图弄清楚这背后的原因,因为第一个查询成功执行我认为这是因为权限,所以尝试

GRANT EXEC ON TYPE::[schema].[typename] TO [User]
GO
Run Code Online (Sandbox Code Playgroud)

但是错误仍在继续,不知道这有什么不对.

奇怪的事情,我注意到,现在,当我把,经过@dt [dbo].[ApproveAddsIds] READONLY上述错误删除,现在的错误是在AS说期待的变量.当我为变量编写代码时,旧错误仍在继续.我认为这可能会有所帮助.

Any*_*ope 16

我发生了这个确切的问题.我只是确保在SQL Server中保存了所需的所有内容并重新启动了SQL Server Management Studio.

重新启动后,错误不再出现.我正在使用SQL Server 2012但我不明白为什么这不应该也适用于2008.

  • 使用SQL Server 2014重新启动SSMS对我有用.检查是否也选择了正确的数据库. (3认同)

ing*_*bic 11

我知道我迟到了,但实际上您看到的是 SSMS Intellisense 的问题,您可以轻松解决它,而无需重新启动整个 SSMS。只需按 CTRL-SHIFT-R。稍等片刻,问题就解决了:)


小智 0

相同的代码也适用于我。BEGIN但是和之间没有任何语句END。尝试添加一些这样的语句

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create  PROCEDURE [dbo].[GetTopTopic](
   @dt  [dbo].[ApproveAddsIds] READONLY  
      )   
AS
BEGIN
--Write some statements here
print 'hi'
END
Run Code Online (Sandbox Code Playgroud)