【问题标题】:Error with simple INSERT statement简单的 INSERT 语句出错
【发布时间】:2012-06-26 02:29:22
【问题描述】:

我做了一个在 asp.net 页面中运行的插入语句。它给了我一个错误,所以我去了 sql server 并按原样运行了该语句,并用它来与我在 asp.net 页面中写的内容进行比较。问题是,它写得很好,但它不起作用。它似乎根本无法检测到数据库或表,并告诉我该表不存在,列也不存在。语句如下所示:

INSERT [Remisiones].[dbo].[Places] (Name, Type) VALUES ("Planta 1", "Planta")

我也尝试过使用[dbo].[Places] 和简单的Places,但它在表格的位置给了我一个错误,说它是Invalid object name。它在做什么?

【问题讨论】:

  • PS 假设表是你说的位置,错误可能是Invalid column name...
  • 我认为你应该以前看过 sql server tsql basics。

标签: sql sql-server tsql insert sql-server-2012


【解决方案1】:

不要使用双引号作为字符串分隔符;使用单引号。

INSERT [Remisiones].[dbo].[Places] (Name, Type) VALUES ('Planta 1', 'Planta');

【讨论】:

  • 哦,好的。我之前用的是mysql,接受双引号
  • 为了避免您在使用符合标准的数据库时出现不愉快的意外:使用方括号引用是非标准的,只有 SQL Server 才能理解(并且可能 Sybase,因为它共享相同的根)。 SQL 标准使用双引号来引用对象名称,这也适用于 SQL Server。您可能会习惯于写 "Remissiones" 而不是 [Remisiones] - 或者更好地避免需要一起引用的对象名称。
  • @a_horse_with_no_name 澄清您在谈论分隔对象和实体,而不是字符串。虽然我理解在对象或实体的情况下使用双引号而不是方括号的参数 for,但在 SQL Server 中,我总是更喜欢在这两种情况下避免使用双引号。如您所见,双引号经常被误认为是有效的字符串分隔符,并且在任何地方看到它们可能会产生错误的感觉。 (而且现在没有大量代码可以直接移植到另一个 RDBMS。)
  • @AaronBertrand:绝对。这就是为什么我说“避免需要引用的对象名称
  • @a_horse_with_no_name 我只是在澄清,因为问题或答案根本不是在谈论对象,只是在谈论字符串文字。如果有人只阅读了您评论的前两行,可能会感到困惑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-08
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
相关资源
最近更新 更多