Я работаю над модулем отчетности для проекта компании. Хотя мы используем 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, я не могу скомпилировать хранимую процедуру.
Для чего это необходимо, я добавил этот тип, но я еще не установил его. Однако я не ожидаю, что это приведет к ошибке компиляции; это приведет к ошибке во время выполнения (о чем я уже говорил ранее).
Есть ли у кого-нибудь опыт в этой проблеме? Благодаря!
Какие SQL версии сервера и совместимости баз данных уровней? –