选择查询而不在*(星号)符号之间留出空格

Ram*_*ran 0 sql sql-server select-query sql-server-2016

select*from tablename -- without spaces in-between the star symbol

select * from tablename -- Applied spaces in-between the star symbol
Run Code Online (Sandbox Code Playgroud)

这两个查询都在我的Sql-Server-2016查询窗口中工作.有什么区别,我们需要使用哪种情况?为什么Sql server接受这个?

Dam*_*ver 6

没有区别.与许多编程语言一样,T-SQL是从字符串组成的输入中解析出来的.在解析期间,可以从文本中提取许多不同类型的"事物",例如KEYWORD(例如selectfrom)和ASTERISK(*).

事实上,这里不需要空格,因为星号字符不能是任何KEYWORD或未转义的IDENTIFIER(例如列或表名)1的一部分,因此没有解析歧义,需要空格才能帮助解决.


1对于IDENTIFIERs,解析器使用单个模式并且后续步骤实际上区分特定枚举列表中的IDENTIFIER实际上是KEYWORD,这并不罕见(不能代表T-SQL).

  • @sepupic - 例如`create procedure select8 as print'Hello'go select8`按预期打印`Hello`. (2认同)