【问题标题】:SQL Server Invalid Column Name ErrorSQL Server 列名无效错误
【发布时间】:2015-07-22 12:55:09
【问题描述】:

在我的 SQL Server 表中插入记录时出现无效的列名错误。这是定义:

CREATE TABLE [dbo].[myTable] 
(
    [id] int IDENTITY(1, 1) NOT NULL,
    [person_name] varchar(255) NOT NULL,
    [modified_By] varchar(255) NOT NULL
)
ON [PRIMARY] WITH (DATA_COMPRESSION = NONE);
GO

然后插入

INSERT INTO myDB.dbo.myTable (id, person_name, modified_By) 
VALUES (1, 'Aishwarya', 'admin')

但执行时出现以下错误:

查找错误 - SQL Server 数据库错误:列名无效 'modified_BY'。

我可以从专栏SELECT 很好。我唯一注意到的错误是“BY”是大写的,这与表定义相反。有什么想法吗?

更新:更新所有语法错误,抱歉

【问题讨论】:

  • person_namemodified_by 之后缺少]
  • missing ) 应该关闭创建表
  • 这是给您错误的实际代码和上下文吗?似乎不太可能。
  • 这里发生了各种各样的事情。正如@jpw 指出的那样,我怀疑这是您的实际代码。当然 person_name 不是整数?您在实际的插入语句中使用 [ ] 吗?

标签: sql-server


【解决方案1】:

您的数据库是否设置为区分大小写的排序规则?您可以通过运行以下查询进行检查:

SELECT DATABASEPROPERTYEX('<Insert Database Name>', 'Collation') SQLCollation;

不区分大小写的排序规则名称中通常包含 CI,例如 SQL_Latin1_General_CP1_CI_AS

区分大小写的排序规则可能类似于Latin1_General_BIN

如果数据库有区分大小写的排序规则,则 T-SQL 中的大小写必须与列定义匹配。

您的帖子在插入语句中不包含modified_BY 大写字母,因此请仔细检查。如果它的大写正确,则检查表上是否有任何可能拼写错误的触发器。

【讨论】:

  • Mine DB 返回 Latin1_General_CI_AS - 尚未搜索此内容,但我猜它不区分大小写?
  • 这也是在我的modified_By 列中定义的
  • 错误消息的大小写不同的事实是可疑的。你有什么触发器吗?
  • 是的,表上有触发器,但我的 DBA 删除并重新创建了所有表,似乎已经解决了问题。他没有告诉我们原因,这很不具建设性
  • 啊,原来是触发代码产生了错误。好吧,希望它不是必需的!
【解决方案2】:

在您的 INSERT 语句中,不要为您的 IDENTITY 列“Id”提供值。它应该看起来像:

INSERT INTO myDB.dbo.myTable
(person_name, modified_By) 
VALUES ('Aishwarya', 'admin')

【讨论】:

  • 果然如此,但这不应该呈现 OP 声称的错误消息。
  • 你是对的。但我猜这将是他/她将遇到的下一个错误:)
【解决方案3】:

不是任何人都想听到的答案,但我们的 DBA 删除并重新创建了表(上面设置了触发器),这已经解决了问题。

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 2018-06-13
    • 2013-09-27
    • 1970-01-01
    • 2019-09-05
    • 1970-01-01
    • 2019-12-09
    • 2015-03-28
    • 1970-01-01
    相关资源
    最近更新 更多