【问题标题】:Point in SQL statementSQL 语句中的点
【发布时间】:2016-04-27 09:36:26
【问题描述】:

我必须从列标题中有一个点的 Excel 工作表中提取数据列表。如果我删除该点,一切都会正常运行,但如果我保留该点,则会收到一条错误消息。

工作:SELECT DISTINCT Ty FROM dbStock

不工作:SELECT DISTINCT Ty. FROM dbStock

System.Data.OleDb.OleDbException (0x80040E14):语法错误(缺失 运算符)在查询表达式 'Ty.' 中。

我在互联网上进行了搜索,但找不到任何关于此的信息。 我试图将Ty. 放在''""[] 之间,但没有成功。

有什么想法吗?

【问题讨论】:

  • 您使用的是哪个 DBMS?
  • 这是您需要的吗? "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Projects\Rework Template.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES";"
  • 那么你为什么不使用版本 1 - 因为它可以工作?或者你想要Ty. 作为列标题,而不是Ty
  • 这些点/列标题正在被另一个系统自动推送,他们无法更改。

标签: sql excel oledb


【解决方案1】:

EDIT2:只是将其放入答案中(来自 cmets)

解决方案是尝试SELECT * FROM ...。这导致该列的名称被翻译为Ty#。 OP 可以继续使用这个名称...

上一页

从这里

Working: SELECT DISTINCT Ty FROM dbStock
Not working: SELECT DISTINCT Ty. FROM dbStock

我认为,该列的名称实际上是Ty。关键是让引擎认为这是一个多部分限定符(如tablename.columnname)。

你可能会使用

SELECT DISTINCT Ty AS [Ty.] FROM dbStock

如果需要输出列名中的点...

编辑:刚刚提到它:

SQL-Server 可以处理这个...

declare @tbl TABLE([Ty.] INT);
INSERT INTO @tbl VALUES(1),(2),(3);

SELECT * FROM @tbl
SELECT [Ty.] FROM @tbl

【讨论】:

  • 谢谢,这开始有道理了,但我不太明白:列名是 Ty。如果我使用:SELECT DISTINCT Ty AS [Ty.] FROM dbStockcode 然后我收到一条错误消息:名称“Ty.”的括号无效。如果我反过来使用它: SELECT DISTINCT [Ty.] AS Ty FROM dbStock 我也会收到一条错误消息,现在抱怨该语句为空... System.Data.OleDb.OleDbException (0x80004005): '' is不是一个有效的名称。
  • @GertDeWilde,编辑了我的答案(但没有解决方案......)有趣的是:如果您声明一个简单的SELECT * FROM ...,该列如何命名?
  • 非常感谢。它被翻译成“Ty#”我现在将我的查询替换为:SELECT DISTINCT [Ty#] FROM dbStock 并且它起作用了!不知道为什么。被翻译成#,但我很高兴它工作。再次感谢!
  • 当然,我确实选择了您的帖子作为答案并对您的评论投了赞成票,但我也忘了投票。再次感谢,你真的帮助了我!
【解决方案2】:

你可以使用

SELECT DISTINCT [Ty.]

SELECT DISTINCT "Ty." // In this case, check if QUOTED_IDENTIFIER is set to ON.

【讨论】:

  • 就像我在帖子中提到的那样,我尝试了这些,但这些都不起作用。 “SELECT DISTINCT [Ty.] FROM dbStock”导致出现错误消息,指出选择语句为空。 "SELECT DISTINCT ""[Ty.]"" FROM dbStock" 结果只是 "Ty"。在我的列表中。
  • 使用 [] 应该可以工作,检查这个venkattechnicalblog.blogspot.in/2009/10/…
  • 另外,当您使用" 时,请检查QUOTED_IDENTIFIER 选项是否设置为ON。
  • 如果我使用它,它会告诉我我的语句是空的并且我收到消息:“System.Data.OleDb.OleDbException (0x80004005): '' is not a valid name. 确保它不包含无效字符或标点符号,并且不会太长。
猜你喜欢
  • 1970-01-01
  • 2014-12-05
  • 2013-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-03
  • 2021-06-15
相关资源
最近更新 更多