#sql-server #permissions #sql-insert
#sql-сервер #разрешения #sql-вставка
Вопрос:
Кажется, я правильно установил 2019 Express и SSMS.
Используя SSMS, я создал пользователя и схему с тем же именем и сделал эту схему схемой по умолчанию для этого пользователя (который является владельцем).
Я могу подключиться к серверу с помощью ODBC и успешно создать простую таблицу с помощью:
CREATE TABLE Jobs ( RowID integer primary key, JobCode Char(7) not null default ' ', ClientCode Char(10) not null default ' ', JobName Char(70) not null default ' ', AddrRowID Integer default 0 )
Затем программа успешно отправляет следующую команду (снова через ODBC):
grant alter, select, update, insert, delete on Jobs to UserID
Однако сервер возвращает ошибку, когда программа отправляет следующую команду (через ODBC):
INSERT INTO Jobs ( JobCode, ClientCode, JobName ) VALUES ( ' A2', 'ADDRE50000', 'Client data entry (new records amp; editing)' );
Я не могу понять, что не так. Есть идеи?
Комментарии:
1. К вашему сведению
`
, для ограждения кода вам нужны обратные галочки (), а не одинарные кавычки ('
). Кроме того, я действительно рекомендую начать использовать разрывы строк и пробелы на ранних стадиях написания кода. Известно, что отдельные длинные строки кода трудно читать и отлаживать.2. Кроме того, если вы получаете сообщение об ошибке, не забудьте сообщить нам, что это за ошибка, на ваш вопрос.
3. Вероятно, вы пожалеете об использовании кодов символов в качестве строк фиксированной длины и попытке форматировать их с помощью пробелов. Значение по умолчанию ‘ ‘ (один пробел), вероятно, означает то же самое, что и «не предоставлено», для чего обычно используется значение NULL. И у вас нет внешних ключей, но, похоже, вы должны — ClientCode, вероятно, должен быть FK для клиентской таблицы (именно здесь эти пробелы по умолчанию вызовут проблемы). Скорее всего, JobName должно быть уникальным. Короче говоря, разработка «хорошей» базы данных — это навык, сильно отличающийся от написания запросов tsql.
4. Спасибо за ваши конструктивные предложения Larnu amp; SMor. Подобные указатели полезны для того, чтобы стать лучшим программистом и участником StackOverflow.
Ответ №1:
Изменить запрос на создание таблицы, добавив ИДЕНТИФИКАТОР для столбца RowID
RowID integer primary key IDENTITY
или добавьте этот столбец для вставки запроса
INSERT INTO Jobs ( RowID ,JobCode, ClientCode, JobName ) VALUES ( {yourId},' A2', 'ADDRE50000', 'Client data entry (new records amp; editing)' );
Комментарии:
1. Блестяще. Добавление идентификатора в ТАБЛИЦУ СОЗДАНИЯ кажется лучшим подходом и отлично сработало!!!