SQL Server Express本地使用sqlcmd登录失败求助
兄弟,太懂你折腾半天卡在这里的憋屈感了!明明SSMS能正常用SQL账号登录操作,换个sqlcmd就卡登录,这事儿确实够闹心的。咱们一步步排查下可能的问题,挨个试总能解决:
密码的引号与特殊字符转义问题:你命令里给密码加了单引号
'TH555!@#',但sqlcmd其实不需要给密码套引号,而且如果是在cmd窗口里运行,!这类特殊字符会被cmd当成历史命令的解析符号,直接写会导致实际传递的密码不对。试试去掉引号,同时把!转义成^!,命令改成:sqlcmd -S TH-DBREP01\sqlexpress -U Guy_RW -P TH555^!@#如果是用PowerShell的话,特殊字符的处理逻辑不一样,也可以试试用双引号把密码包起来:
-P "TH555!@#"。实例名称与连接协议问题:先确认下实例名是不是真的没问题——打开
services.msc,找到SQL Server的服务,看服务名称是不是SQL Server (SQLEXPRESS),如果是那实例名没错,但也可以试试用localhost\sqlexpress代替机器名,避免机器名解析的小问题。另外,检查SQL Server配置管理器里,SQL Server网络配置→SQLEXPRESS的协议,确认TCP/IP和命名管道是启用的,毕竟SSMS可能默认用共享内存连接,而sqlcmd可能走其他协议,协议没开就会登录失败。身份验证模式再确认:虽然你SSMS能登,但保险起见再检查下服务器的身份验证模式——打开SSMS右键服务器→属性→安全性,确认选中的是SQL Server和Windows身份验证模式,别不小心改成仅Windows身份验证了。
用户登录权限检查:确认
Guy_RW这个账号确实有登录该SQL实例的权限,右键账号→属性→登录,看看默认数据库是不是你能访问的,有没有被禁用登录的情况。
如果以上都试过还是不行,也可以试试加上-C参数信任服务器证书,或者指定数据库运行,比如:
sqlcmd -S TH-DBREP01\sqlexpress -U Guy_RW -P TH555^!@# -d YourDatabaseName -C
备注:内容来源于stack exchange,提问作者Jeff Shall

