【问题标题】:Why does the following sql query result in invalid column name?为什么下面的 sql 查询导致列名无效?
【发布时间】:2015-08-06 11:56:25
【问题描述】:

我有以下 SQL 语句:

"INSERT INTO OUTSTANDING(type, orderID) VALUES(data, @ID)";

或在单词周围加上“”以增加清晰度

"INSERT INTO OUTSTANDING(type, orderID) VALUES(\"data\", @ID)";

现在,如果我在我的 c# 代码中执行此操作,我会收到一条错误消息:

SqlException:类型未处理的异常 System.Data.SqlClient.SqlException 在 System.Data.dll 中发生:附加信息:列名数据无效。

现在我想知道 SQL 怎么可能将 value 中的字符串解释为字符串。

【问题讨论】:

  • data 的来源是什么?是字段绑定变量吗?
  • 如果直接在数据库上使用,查询是否有效?
  • 试图理解你的代码是什么意思,我想出了“好吧,我不知道data在这里是什么意思”,这几乎就是错误消息所说的.
  • data 应该只是这里的字符串数据,但如果这是问题,那么我可以理解发生了什么。
  • 什么是类型列中的数据类型,请记住现在您尝试插入字符串值。好吗?

标签: c# sql sql-server


【解决方案1】:

SQL-Server 中的双引号是 delimiters for identifiers names,而不是文本分隔符。

data 周围使用双引号告诉RDBMS 它是一个对象的名称;改用单引号:

INSERT INTO OUTSTANDING(type,orderID) VALUES('data',@ID);

【讨论】:

  • 这与 M. Nasser Javaid 给出的答案相同
  • @Bulat 差不多。不同之处在于行为的解释和对官方文档的引用
【解决方案2】:

试试这个

"INSERT INTO OUTSTANDING([Type], [OrderID]) VALUES('data', @ID)"

代替

"INSERT INTO OUTSTANDING(type, orderID) VALUES(\"data\", @ID)"

【讨论】:

  • 你可能还想把type列放在方括号里[],因为它是sql server中的一个关键字
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-12
相关资源
最近更新 更多