Я пишу приложение 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].
Я искал решение, но я нашел только добавление ссылки на базу данных, щелкнув правой кнопкой мыши ссылки и т. д., но у меня нет этой опции в моем проводнике решений.
Возможно, я ищу его не в тех местах, но единственные варианты, которые у меня есть после щелчка правой кнопкой мыши, выглядят примерно так:
что касается кода создания таблиц в базе данных:
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.
Ну ошибка означает, что это не так...
Как насчет публикации созданного оператора для этой таблицы
Что будет, если заменить [dbo].[apbd.Student]
на apbd.Student
? Тогда это работает?
@mjwills Я перепроверил это, и это сработало, извините за путаницу ... думаю, я должен был поставить что-то еще раньше, но сначала я был на 100% уверен, что действительно написал [apbd]. [Студент]. Тем не менее, спасибо за ваше время и помощь :).
В этом случае, пожалуйста, отметьте ответ ниже (который предлагает использовать это) как ответ.
Я бы выполнил следующее, чтобы определить фактическое имя и схему таблицы:
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].
Действительно ли ваша таблица называется [apbd.Student]? или это должно быть [apbd].[Student] или даже [apbdStudent]