You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2022查询User表提示表名附近语法错误如何解决

错误成因

User是SQL Server 2022的内置保留关键字,对应该系统内置的USER()函数,作用是返回当前上下文的登录用户名。你在查询语句中直接写FROM User时,SQL语法解析器不会将其识别为自定义表名,会触发语法解析失败,最终抛出表名附近存在语法错误的提示。
另外你的代码中存在一处冗余逻辑:ExecuteNonQuery()仅用于执行INSERT/UPDATE/DELETE这类无结果集返回的操作,你执行的是SELECT查询,提前调用这个方法会额外触发一次无效的查询执行,没有实际作用。

修复方案
  • 语法修正:给作为表名使用的保留关键字添加SQL Server专属的界定符方括号[],将语句中的User修改为[User],修改后的查询语句为:
    SELECT * FROM [User] WHERE Username=@user AND Password=@pass
    
  • 长期规范优化(可选但推荐):如果项目还在迭代初期,建议避免使用保留关键字命名数据库对象,比如将用户表重命名为Users、Sys_User这类非保留字名称,后续编写SQL时不需要额外添加界定符,也能避免同类语法错误。
  • 冗余代码清理:删除语句中多余的cmd.ExecuteNonQuery()调用,SELECT查询直接通过SqlDataAdapter.Fill()填充结果集即可。
  • 安全提示:不建议明文存储用户密码,生产环境建议对密码做加盐哈希处理后再存储,避免数据泄露引发安全问题。

修正后的完整VB代码如下:

Using con As New SqlClient.SqlConnection("Server=xxx.xxx.x.x,1433;Database=XX;User ID=xxxxx;Password=xxxxxxxxx")
    con.Open()
    Dim cmd As New SqlCommand("SELECT * FROM [User] WHERE Username=@user AND Password=@pass", con)
    cmd.Parameters.AddWithValue("@user", TextBox1.Text)
    cmd.Parameters.AddWithValue("@pass", TextBox2.Text)
    Dim adap As New SqlDataAdapter(cmd)
    Dim tab As New DataTable
    adap.Fill(tab)
End Using 

内容的提问来源于stack exchange,提问作者Christy_mall95

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 06:21:47