48

我正在尝试在 SQL Server Management Studio 中运行以下相当简单的查询:

SELECT TOP 1000 * 
FROM 
    master.sys.procedures as procs
left join 
    master.sys.parameters as params on procs.object_id = params.object_id

这似乎完全正确,但我不断收到以下错误:

消息 102,级别 15,状态 1,第 6 行
'' 附近的语法不正确。

如果我取出加入并且只做一个简单的选择,它就可以工作:

SELECT TOP 1000 *
FROM 
    master.sys.procedures as procs

但我需要加入才能工作。在这个查询中我什至没有字符串'',所以我无法弄清楚它不喜欢什么。

4

7 回答 7

95

当您从网页或电子邮件复制代码并且文本包含不可打印的字符(如单个 CR 或 LF 和不间断空格)时,可能会出现此类意外问题。

于 2013-11-04T08:15:00.313 回答
22

Panagiotis Kanavos 是对的,有时复制粘贴 T-SQL 会使出现不需要的字符...

我终于找到了一种简单快速的方法(只需要 Notepad++)来检测哪个字符是错误的,而无需手动重写整个语句:无需将任何文件保存到磁盘。

在记事本++中非常快:

  • 点击“新建文件”
  • 检查菜单“编码”:该值应为“UTF-8编码”;如果不是,请设置它
  • 粘贴您的文字 在此处输入图像描述
  • 从编码菜单中,现在单击“在 ANSI 中编码”并再次检查您的文本 在此处输入图像描述

您应该很容易找到错误的字符

于 2019-05-21T12:50:17.690 回答
3

您可以使用编辑器(我使用 Visual Studio 代码)识别文件(在本例中为 sql 文件)使用的编码。打开文件后,它会在编辑器的右下角显示文件的编码。

编码

当我尝试签入一个编码为 UTF-BOM(源自非 Windows 机器)的文件时遇到了这个问题,该文件在单个字符串字符上附加了特殊字符

您可以按如下方式更改文件的编码:

在 VSCode 的底部栏中,您会看到标签 UTF-8 With BOM。点击它。打开一个弹出窗口。单击使用编码保存。您现在可以为该文件选择新编码 (UTF-8)

于 2021-01-15T18:32:26.500 回答
3

对我来说,错误是我从文本文件中读取 SQL 语句,并且文本文件以 UTF-8 和 BOM(字节顺序标记)格式保存。

为了解决这个问题,我在 Notepad++ 中打开了文件,在编码下选择了 UTF-8。或者,您可以使用十六进制编辑器删除文件的前三个字节。

于 2018-09-07T03:19:42.087 回答
1

我正在使用 ADO.NET,并且正在使用 SQL 命令:

 string query =
"SELECT * " +
"FROM table_name" +
"Where id=@id";

问题是我在结尾处错过了一个空格"FROM table_name"+ 所以基本上它说

string query = "SELECT * FROM table_nameWHERE id=@id";

这导致了错误。

希望能帮助到你

于 2019-06-07T03:39:39.023 回答
0

对我来说,我错过了声明中的单引号

错误一:"INSERT INTO Customers (CustomerNo, FirstName, MobileNo1, RelatedPersonMobileNo) VALUES ('John123', John', '1111111111', '1111111111)"

错过了John'1111111111中的报价

正确一:"INSERT INTO Customers (CustomerNo, FirstName, MobileNo1, RelatedPersonMobileNo) VALUES ('John123', 'John', '1111111111', '1111111111')"

于 2022-02-23T13:37:50.020 回答
0

我收到此错误是因为我将名列粘贴到DECLARE 语句中

DECLARE @userdata TABLE(
f.TABLE_CATALOG nvarchar(100),
f.TABLE_NAME nvarchar(100),
f.COLUMN_NAME nvarchar(100),
p.COLUMN_NAME nvarchar(100)
)
SELECT * FROM @userdata 

错误: 消息 102,级别 15,状态 1,第 2 行 '.' 附近的语法不正确。

DECLARE @userdata TABLE(
f_TABLE_CATALOG nvarchar(100),
f_TABLE_NAME nvarchar(100),
f_COLUMN_NAME nvarchar(100),
p_COLUMN_NAME nvarchar(100)
)
SELECT * FROM @userdata

没有错误

于 2019-07-02T13:35:30.263 回答