MS SQL Server 2008 - 从 MySQL 迁移时出现的混乱:“从表中选择 XYZ”
-
03-07-2019 - |
题
所以我在这里很困惑。
我必须将数据库从 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 中更重要,但仍然存在。在您的应用程序中可能没有足够大的差异,但仍然值得了解: