所以我在这里很困惑。

我必须将数据库从 MySQL 迁移到 MS SQL Server 2008。我已通过 SQL Maestros 的“MS SQL 数据向导”应用程序传输数据。它从我的 MySQL 数据库“gk”中获取数据+结构,并将其复制到我的 MS SQL Express 实例上的数据库“gk”中。

但是,当我连接到 MS SQL 实例并尝试运行 SQL 查询时,只有在执行“时才得到结果”select * from gk.TABLENAME“ 或者 ”select * from gk.gk.TABLENAME“……如果我执行“select * from TABLENAME“执行后”use gk”,我得到:

错误:对象名称“TABLENAME”无效
SQL状态:S0002
错误代码:208

我如何使其表现“正常”?即,我连接到特定的数据库,这样我就不必显式告诉它在哪个数据库/模式中查找该表?

更新:我应该指定由 SQL 数据向导应用程序创建的结构。查看 SQL Server Management Studio 上的对象浏览器树,可以看到:

[HOSTNAME]\SQLEXPRESS (SQL Server ...)
  |-- Databases
       |-- System Databases
       |-- gk
            |...
            |-- Tables   
                  |-- TABLE1
                  |-- TABLE2
                  |-- TABLE3

...等等。

谢谢。-担

有帮助吗?

解决方案

在您的用户的“登录属性”对话框中,有一个“用户映射”对象。您可以在其中设置用户的默认架构的页面。将其设置为“gk” (在“gk”数据库中)应该允许您在不完全限定表的情况下编写查询。

其他提示

试试这个,如果你还没有:

USE gk
GO

SELECT * FROM tablename

看起来向导创建了一个名为“gk”的数据库,然后将所有表放入标题为“gk”的架构中。

如果表存在于命名模式中(即,除了默认模式“dbo”之外),那么在查询时您始终必须指定模式。

笔记:在某些情况下,不显式指定架构/所有者会导致显着的性能损失。在旧版本的 SQL 中更重要,但仍然存在。在您的应用程序中可能没有足够大的差异,但仍然值得了解:

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top