我正在尝试在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
这似乎完全正确,但我不断收到以下错误:
Msg 102,Level 15,State 1,Line 6
附近的语法不正确
''。
如果我取出连接并只做一个简单的选择,它就有效:
SELECT TOP 1000 *
FROM
master.sys.procedures as procs
但我需要加入工作。我在这个查询中甚至没有拥有字符串'',所以我无法弄清楚它不喜欢什么。
答案 0 :(得分:70)
当您从网页或电子邮件中复制代码并且文本包含不可打印的字符(如单个CR或LF和不间断空格)时,可能会出现此类意外问题。
答案 1 :(得分:3)
您可以使用编辑器(我使用 Visual Studio 代码)识别用于文件(在本例中为 sql 文件)的编码。打开文件后,它会在编辑器的右下角显示文件的编码。
当我尝试签入一个编码为 UTF-BOM(源自非 Windows 机器)的文件时,我遇到了这个问题,该文件在单个字符串字符后附加了特殊字符
您可以按如下方式更改文件的编码:
在 VSCode 的底部栏中,您将看到标签 UTF-8 With BOM。点击它。一个弹出窗口打开。单击使用编码保存。您现在可以为该文件选择新的编码 (UTF-8)
答案 2 :(得分:1)
对我来说,错误是我从一个文本文件中读取了SQL语句,并且该文本文件以BOM(字节顺序标记)格式保存为UTF-8。
为解决此问题,我在Notepad ++中打开了文件,并在“编码”下选择了UTF-8。或者,您可以使用十六进制编辑器删除文件的前三个字节。
答案 3 :(得分:1)
Panagiotis Kanavos是正确的,有时复制和粘贴T-SQL可能会使不需要的字符出现...
我终于找到了一种简单快捷的方法(只需使用Notepad ++)即可检测出哪个字符错误,而不必手动重写整个语句:无需将任何文件保存到磁盘。
在记事本++中,速度非常快:
您应该容易找到错误的字符
答案 4 :(得分:0)
我使用的是ADO.NET,并且使用的是SQL Command:
abstract class ImmersiveBottomSheetDialogFragment<T : ViewDataBinding> : BottomSheetDialogFragment() {
protected lateinit var binding: T
private val systemUiVisibility: Int = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
or View.SYSTEM_UI_FLAG_FULLSCREEN
or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY)
fun showImmersive(
fragmentManager: FragmentManager,
tag: String,
tapOutsideEnabled: Boolean = false
) {
show(fragmentManager, tag)
fragmentManager.executePendingTransactions()
dialog?.let { dialog ->
dialog.setCanceledOnTouchOutside(tapOutsideEnabled)
dialog.window?.let { window ->
window.decorView.systemUiVisibility = systemUiVisibility
window.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)
}
}
}
}
事情是我在 string query =
"SELECT * " +
"FROM table_name" +
"Where id=@id";
的末尾错过了空白
所以基本上说
"FROM table_name"+
这是导致错误的原因。
希望有帮助
答案 5 :(得分: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
错误: Msg 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
没有错误