“'附近的语法不正确

时间:2013-11-01 15:57:52

标签: sql sql-server ssms

我正在尝试在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

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

6 个答案:

答案 0 :(得分:70)

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

答案 1 :(得分:3)

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

encoding

当我尝试签入一个编码为 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 ++)即可检测出哪个字符错误,而不必手动重写整个语句:无需将任何文件保存到磁盘。

在记事本++中,速度非常快:

  • 点击“新文件”
  • 在菜单“编码”下检查:该值应为“以UTF-8编码”;如果不是,请设置
  • 粘贴您的文字 enter image description here
  • 从“编码”菜单中,现在单击“在ANSI中编码”,然后再次检查您的文本 enter image description here

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

答案 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

没有错误