1

我正在处理公司项目的报告模块。尽管我们对应用程序使用了ORM,但我已经决定为预计迁移到SSRS的报告编写存储过程。SQL Server中的表值参数错误

这些存储过程需要表值参数输入。因此,我创建了我的表类型:

USE MyDatabase 
GO 

/****** Object: UserDefinedTableType [dbo].[IntList] Script Date: 5/8/2013 5:20:59 PM ******/ 
CREATE TYPE [dbo].[IntList] AS TABLE(
    [Id] [int] NOT NULL, 
    PRIMARY KEY CLUSTERED 
(
    [Id] ASC 
)WITH (IGNORE_DUP_KEY = OFF) 
) 
GO 

我有以下SQL Server存储过程:

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
USE MyDatabase 
GO 
-- ============================================= 
-- Author:  <lunchmeat317> 
-- Create date: <05/06/2013> 
-- Description: <File Type Report> 
-- ============================================= 
ALTER PROCEDURE Report_FileType 
    @filetype varchar(20) = null, 
    @User intList READONLY, 
    @Group intList READONLY 
AS 
BEGIN 
    SET NOCOUNT ON; 

    /* 
    lf = LibraryFile 
    lfu = LibraryFileAssignedUser 
    lfg = LibraryFileAssignedGroup 
    */ 

    SELECT Extension AS FileType, COUNT(1) AS TotalFiles 
    FROM LibraryFile lf 
    LEFT JOIN LibraryFileAssignedUser lfu 
     ON (SELECT COUNT(1) FROM @User) != 0 
     AND lfu.LibraryFileId = lf.Id 
    LEFT JOIN LibraryFileAssignedGroup lfg 
     ON (SELECT COUNT(1) FROM @Group) != 0 
     AND lfg.LibraryFileId = lf.Id 
    WHERE ((@filetype IS NULL) OR (Extension = @filetype)) 
    AND (
     ((@User IS NULL) OR (lfu.UserId IN (SELECT * FROM @User))) 
     OR ((@Group IS NULL) OR (lfg.HubGroupId IN (SELECT * FROM @Group))) 
    ) 
    GROUP BY Extension 
END 
GO 

当我试图改变存储过程,我不断收到错误消息

Msg 137, Level 16, State 1, Procedure Report_FileType 
Must declare the scalar variable "@User". 
Msg 137, Level 16, State 1, Procedure Report_FileType 
Must declare the scalar variable "@Group". 

我不明白为什么会发生这种情况。如果我确实使用了标量类型(并更新我的代码来匹配),它就会起作用。但是,当我尝试使用TVP时,我无法编译存储过程。

对于它的价值,我已经添加了类型,但我还没有对它设置权限。但是,我不认为会导致编译错误;它只会在运行时导致错误(我之前已经处理过)。

有没有人有这方面的经验?谢谢!

+0

什么是SQL Server版本和数据库兼容级别? – 2013-05-09 17:49:54

回答

1
+0

糟糕 - 我忘记更改这些代码行。将编辑。 – 2013-05-09 17:58:44

+1

将这些行更改为SELECT语句并进行编译。完全错过了 - 拥有一双额外的眼睛非常棒!我确信这不是一个语法问题。谢谢! – 2013-05-09 18:02:31