Процедура не работает из-за неразрешенной ссылки на объект

Я пишу приложение WPF, где в какой-то момент я пытаюсь добавить новую строку в свою базу данных с помощью процедуры, как показано ниже:

CREATE PROCEDURE dbo.InsertStudent
    @IdStudent INT,
    @FirstName VARCHAR(50),
    @LastName VARCHAR(50),
    @Address VARCHAR(50),
    @IndexNumber VARCHAR(50),
    @IdStudies INT
AS
    SET NOCOUNT ON

    INSERT INTO [dbo].[apbd.Student]
           ([IdStudent]
           ,[FirstName]
           ,[LastName]
           ,[Address]
           ,[IndexNumber]
           ,[IdStudies])
    VALUES
           (@IdStudent
           ,@FirstName
           ,@LastName
           ,@Address
           ,@IndexNumber
           ,@IdStudies)

но всякий раз, когда я собираюсь его использовать, я получаю сообщение об ошибке:

SQL71502: Procedure: [dbo].[InsertStudent] has an unresolved reference to object [dbo].[apbd.Student].

Я искал решение, но я нашел только добавление ссылки на базу данных, щелкнув правой кнопкой мыши ссылки и т. д., но у меня нет этой опции в моем проводнике решений.

Возможно, я ищу его не в тех местах, но единственные варианты, которые у меня есть после щелчка правой кнопкой мыши, выглядят примерно так:

  1. Добавить ссылку...
  2. Добавить ссылку на сервис...
  3. Добавить подключенный/конкатенированный/накопительный (или как следует перевести) сервис
  4. Добавить анализатор...
  5. Управление пакетами NuGet...

что касается кода создания таблиц в базе данных:

CREATE SCHEMA apbd;

GO

-- tables
-- Table: Student
CREATE TABLE apbd.Student (
    IdStudent int  NOT NULL IDENTITY,
    FirstName nvarchar(100)  NOT NULL,
    LastName nvarchar(100)  NOT NULL,
    Address nvarchar(100)  NOT NULL,
    IndexNumber nvarchar(50) NOT NULL,
    IdStudies int  NOT NULL,
    CONSTRAINT Student_pk PRIMARY KEY  (IdStudent)
);

-- Table: Student_Subject
CREATE TABLE apbd.Student_Subject (
    IdStudentSubject int  NOT NULL IDENTITY,
    IdStudent int  NOT NULL,
    IdSubject int  NOT NULL,
    CreatedAt datetime  NOT NULL,
    CONSTRAINT Student_Subject_pk PRIMARY KEY  (IdStudentSubject,IdStudent,IdSubject)
);

-- Table: Studies
CREATE TABLE apbd.Studies (
    IdStudies int  NOT NULL IDENTITY,
    Name nvarchar(100)  NOT NULL,
    CONSTRAINT Studies_pk PRIMARY KEY  (IdStudies)
);

-- Table: Subject
CREATE TABLE apbd.Subject (
    IdSubject int  NOT NULL IDENTITY,
    Name nvarchar(100)  NOT NULL,
    CONSTRAINT Subject_pk PRIMARY KEY  (IdSubject)
);

-- End of file.

Действительно ли ваша таблица называется [apbd.Student]? или это должно быть [apbd].[Student] или даже [apbdStudent]

Dale K 10.04.2019 01:20

Ну ошибка означает, что это не так...

Dale K 10.04.2019 02:33

Как насчет публикации созданного оператора для этой таблицы

Dale K 10.04.2019 02:34

Что будет, если заменить [dbo].[apbd.Student] на apbd.Student? Тогда это работает?

mjwills 10.04.2019 02:51

@mjwills Я перепроверил это, и это сработало, извините за путаницу ... думаю, я должен был поставить что-то еще раньше, но сначала я был на 100% уверен, что действительно написал [apbd]. [Студент]. Тем не менее, спасибо за ваше время и помощь :).

crystalsky 12.04.2019 19:19

В этом случае, пожалуйста, отметьте ответ ниже (который предлагает использовать это) как ответ.

mjwills 13.04.2019 05:16
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
6
643
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я бы выполнил следующее, чтобы определить фактическое имя и схему таблицы:

SELECT
    CAST(
        MAX(
            CASE
                WHEN
                    TABLE_SCHEMA = 'apbd'
                    AND TABLE_NAME = 'Student'
                THEN 1
                ELSE 0
            END
        ) AS bit
    ) [The table is apbd.Student]
    ,
        CAST(
            MAX(
                CASE
                    WHEN
                        TABLE_SCHEMA = 'dbo'
                        AND TABLE_NAME = 'apbd.Student'
                    THEN 1
                    ELSE 0
                END
            ) AS bit
        ) [The table is dbo.apbd.Student]
FROM INFORMATION_SCHEMA.TABLES

Мне также интересно, может быть, вам нужен оператор USE в начале вашего скрипта CREATE — вы создаете процедуру в правильной базе данных?

Если таблица находится в другой базе данных, вам нужно будет сослаться на базу данных в вашей хранимой процедуре, то есть [DatabaseName].[dbo].[apbd.Student].

Ответ принят как подходящий

База данных MS SQL Server по умолчанию имеет только одну схему (dbo). Вы можете добавлять схемы для группировки вещей либо в целях безопасности, либо в организационных целях.

В вашем случае была создана схема apbd, и Student был создан в этой схеме, а не в схеме dbo. Итак, чтобы сослаться на эту таблицу, вам нужно использовать [apbd].[Student].

Другие вопросы по теме