【问题标题】:SQL Server 2019 Express - can create table but unable to insert recordsSQL Server 2019 Express - 可以创建表但无法插入记录
【发布时间】:2020-10-17 09:36:35
【问题描述】:

看来我已经正确安装了 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 & editing)' );

我不知道出了什么问题。有什么想法吗?

【问题讨论】:

  • 仅供参考,您需要的是反引号 (`),而不是单引号 (')。另外,我真的建议在编写代码时尽早开始充分利用换行符和空格。众所周知,单行长代码难以阅读和调试。
  • 另外,如果您遇到错误,请不要忘记告诉我们您的问题是什么错误。
  • 您可能会后悔将字符代码用作定长字符串并尝试使用空格对其进行格式化。 ' '(一个空格)的默认值可能意味着与“未提供”相同 - 这是通常使用 NULL 的东西。而且你没有外键,但似乎你应该 - ClientCode 应该是 Client 表的 FK(这是那些空间默认值会导致问题的地方)。很可能 JobName 应该是唯一的。简而言之,设计一个“好”的数据库与编写 tsql 查询是一项非常不同的技能。
  • 感谢您的建设性建议 Larnu & SMor。像这样的指针对于成为更好的程序员和 StackOverflow 参与者非常有价值。

标签: sql-server permissions sql-insert


【解决方案1】:

更改表创建查询 为 RowID 列添加 IDENTITY

RowID integer primary key IDENTITY

或添加此列以插入查询

INSERT INTO Jobs ( RowID ,JobCode, ClientCode, JobName ) VALUES ( {yourId},' A2', 'ADDRE50000', 'Client data entry (new records & editing)' );

【讨论】:

  • 太棒了。将 IDENTITY 添加到 CREATE TABLE 似乎是更好的方法,并且效果很好!!!
猜你喜欢
  • 2020-07-23
  • 1970-01-01
  • 2021-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多