Процедура не работает из-за неразрешенной ссылки на объект - PullRequest
0 голосов
/ 10 апреля 2019

Я пишу приложение 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: Процедура: [dbo]. [InsertStudent] имеет неразрешенную ссылку на объект [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.

Ответы [ 2 ]

1 голос
/ 10 апреля 2019

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

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].

0 голосов
/ 10 апреля 2019

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...