xhon Ответов: 1

Встроенная функция табличного значения : недопустимое имя объекта


Когда я вызываю встроенную функцию табличного значения, я получаю эту ошибку:

"Недопустимое резервирование имен объектов.ReservationDetails"

Что я уже пробовал:

Это моя встроенная функция табличного значения:

DECLARE @IDMovies INT = Movies.IDMovies
CREATE FUNCTION [dbo].Reservations.ReservationDetails (@IDMovies INT)
RETURNS TABLE  
AS
RETURN  
         SELECT *
     FROM Movies m
     INNER JOIN Reservations r ON b.IDMovies = r.IDMovies

1 Ответов

Рейтинг:
2

Richard Deeming

Имя вашей функции не может содержать . если только ты не сбежишь от него.
Идентификаторы баз данных от SQL-сервера Майкрософт документы[^]

Дайте ему более простое название:

CREATE FUNCTION dbo.ReservationDetails (@IDMovies INT)
Или создайте его в отдельной схеме:
CREATE FUNCTION Reservations.ReservationDetails (@IDMovies INT)

Если ты действительно хотите выстрелить себе в ногу, убегайте от имени функции. Вам также нужно будет избегать его каждый раз, когда вы его вызываете.
-- Don't do this!
CREATE FUNCTION [dbo].[Reservations.ReservationDetails] (@IDMovies INT)


xhon

Я получил это другое сообщение об ошибке:
"Имена столбцов в каждом представлении или функции должны быть уникальными. Имя столбца "IDMovies" в представлении или функции "ReservationDetails" указывается несколько раз."

Richard Deeming

Не используйте SELECT * FROM; укажите список столбцов явно и убедитесь, что у вас нет повторяющихся имен столбцов.

Например, обе таблицы в вашем JOIN есть колонка под названием IDMovies.

xhon

Хорошо, спасибо, я отброшу таблицу, содержащую внешний ключ, и создам ее снова, назвав ссылочный столбец по-другому...Или есть способ избежать падения стола? Может быть, я могу использовать переменную для этого имени столбца внутри функции?

Richard Deeming

Вам не нужно ронять стол. Просто явно указывать список столбцов в SELECT заявление.