尝试查询本地 SQL 服务器数据库时出现无效对象名称请求错误

Invalid object name request error occurs upon trying to query local SQL Server database

我已成功连接到生产 SQL 服务器数据库并使用 knex 查询它。然后,我在 macOS 上使用 Docker 和 SQL Operations Studio 在本地恢复了该数据库(在 this walkthrough 之后)。我能够连接到它并从 SQLOPS 中查询它。我现在正尝试以编程方式连接并查询本地数据库,而不是生产数据库。我更新了配置以填写本地托管数据库的相关信息,但我认为它不完全正确,因为我收到以下错误:

RequestError: select top (@p0) * from [OurTableName] where [SomeID] = @p1 - Invalid object name 'OurTableName'.

研究该错误表明它可能是配置问题。这是我的配置对象:

{
  client: 'mssql',
  connection: {
    user: 'sa',
    password: 'password',
    server: 'localhost',
    port: 1433,
    options: {
      encrypt: false,
      database: 'ourdbname',
    },
  },
  pool: {
    min: 2,
    max: 10,
  },
}

你看出问题出在哪里了吗?在我能够以编程方式连接到它之前,我还需要在 SQLOPS 内做些什么吗?

这通常是您所连接的数据库与保存 table 的数据库之间的问题。 'sa' 登录默认为 master 数据库。尝试使用这种类型的请求:

select top (@p0) * 
from [OurDBName].[dbo].[OurTableName] 
where [SomeID] = @p1 

查看 Knex 自己的 SQL 服务器配置文件 here,他们的配置格式不同。不确定您的配置来自何处,但请试一试:

{
    client: 'mssql',
    connection: testConfig.mssql || {
      user: 'sa',
      password: 'S0meVeryHardPassword',
      server: 'localhost',
      database: 'knex_test',
    },
    pool: pool,
    migrations: migrations,
    seeds: seeds,
}

当我遇到这个问题是因为 "default_database_name" 被设置为错误的 DB:

首先检查“default_database_name”是什么,执行以下查询:

SELECT sp.name , sp.default_database_name FROM sys.server_principals
 sp WHERE sp.name = SUSER_SNAME();

如果这确实设置为错误的数据库名称,您可以更改它,如下所示:

ALTER LOGIN sa WITH DEFAULT_DATABASE = TheRightDbName;` 

现在设置了正确的数据库,可以像往常一样找到对象。