我在使用用户定义的表类型作为临时存储过程的参数类型时遇到问题。
我在包含临时表,临时存储过程,临时存储过程的数据库中执行所有这些操作。
代码如下所示:
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
作为临时存储过程中的类型吗?遗憾的是,我只能访问临时存储过程而不是永久版本。
附带问题:使用功能会更好吗?
答案 0 :(得分:1)
您需要在tempdb
。
以下工作正常
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