SQL Server 2019 Express — может создавать таблицу, но не может вставлять записи

#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. Блестяще. Добавление идентификатора в ТАБЛИЦУ СОЗДАНИЯ кажется лучшим подходом и отлично сработало!!!