在SQL Server中使用用户定义的表类型和临时存储过程

时间:2017-09-30 17:35:29

标签: sql sql-server

我在使用用户定义的表类型作为临时存储过程的参数类型时遇到问题。

我在包含临时表,临时存储过程,临时存储过程的数据库中执行所有这些操作。

代码如下所示:

CREATE TYPE test_type AS TABLE (user int, user_value int) 
GO

CREATE PROCEDURE #test_pro 
    @input test_type READONLY
AS
    SELECT TOP 10 * 
    FROM @input 
GO

我收到错误:

  

参数或变量@input的数据类型无效。

我可以使用数据类型test_type作为临时存储过程中的类型吗?遗憾的是,我只能访问临时存储过程而不是永久版本。

附带问题:使用功能会更好吗?

1 个答案:

答案 0 :(得分:1)

您需要在tempdb

中创建UDT

以下工作正常

USE tempdb

GO

CREATE TYPE test_type AS TABLE ([user] int, user_value int)

GO

--Switch database
USE msdb

GO

CREATE PROCEDURE #test_pro @input TEST_TYPE READONLY
AS
    SELECT TOP 10 *
    FROM   @input

GO

EXEC #test_pro

GO

USE tempdb

DROP TYPE test_type

DROP PROC #test_pro 

如果您在CREATE TYPE中没有tempdb权限,则可以改为使用#temp表。

e.g。以下作品

CREATE PROCEDURE #test_pro 
AS
    SELECT TOP 10 * 
    FROM #input 
GO

GO

CREATE TABLE #input([user] int, user_value int) 

GO

EXEC #test_pro