【问题标题】:MS SQL Server 2008 - Confusion in migrating from MySQL re: "select XYZ from TABLE"MS SQL Server 2008 - 从 MySQL 迁移时的困惑 re:“从 TABLE 中选择 XYZ”
【发布时间】:2009-03-04 18:28:17
【问题描述】:

所以我只是在这里感到困惑。

我必须将我的数据库从 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”无效
SQLState: S0002
错误代码:208

如何使这个行为“正常”?即,我连接到一个特定的数据库,这样我就不必明确告诉它在哪个数据库/模式中找到表?

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

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

...等等。

谢谢。 -丹

【问题讨论】:

    标签: sql-server database sql-server-2008


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      USE gk
      GO
      
      SELECT * FROM tablename
      

      【讨论】:

      • 不,还是同样的问题。
      【解决方案3】:

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

      如果表存在于命名模式中(即,除了默认模式“dbo”之外的其他东西),那么您在查询时总是必须指定模式。

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

      【讨论】:

      • 那么有没有办法将这些表移动到 dbo 架构中?
      猜你喜欢
      • 2011-06-23
      • 1970-01-01
      • 2012-07-25
      • 2010-09-18
      • 2010-12-18
      • 2013-06-12
      • 2010-11-29
      • 1970-01-01
      • 2011-06-09
      相关资源
      最近更新 更多