MySql到Sql Server的迁移问题

时间:2010-08-18 22:55:44

标签: sql mysql sql-server

我使用迁移工具成功地从MySql迁移到Sql Server。

不幸的是,出于某种原因,它标记了表database.DBO.tablename,而不仅仅是database.tablename

我从未使用过Sql Server,所以也许这就是他们为表命名的方式。

当我这样做时:

SELECT TOP 1000 [rid]
      ,[filename]
      ,[qcname]
      ,[compound]
      ,[response]
      ,[isid]
      ,[isidresp]
      ,[finalconc]
      ,[rowid]
  FROM [test].[calibration]

它不起作用

但是,当我这样做时:

SELECT TOP 1000 [rid]
      ,[filename]
      ,[qcname]
      ,[compound]
      ,[response]
      ,[isid]
      ,[isidresp]
      ,[finalconc]
      ,[rowid]
  FROM [test].[dbo].[calibration]

它有效。

有谁知道为什么它以DBO作为前缀?

5 个答案:

答案 0 :(得分:5)

dbo是您创建的任何内容(表格,存储过程等等)的标准database owner,因此迁移工具会自动为其添加前缀。

当您访问Sql Server中的某些内容时,例如名为calibration的表,以下内容在功能上是等效的:

  • calibration
  • dbo.calibration
  • database_name.dbo.calibration
  • server_name.database_name.dbo.calibration

MySql没有,据我记得(大约12个月前我们使用nant执行的自定义脚本将解决方案从MySql迁移到SqlServer)支持数据库所有者在引用对象时,因此您可能不熟悉四个部分(server_name.database_name.owner_name.object_name)引用。

基本上,如果要指定要访问的数据库,还需要指定对象的“所有者”。即,以下功能相同:

USE [master]
GO
SELECT * FROM [mydatabase].[dbo].[calibration]



USE [mydatabase]
GO
SELECT * FROM [calibration]

答案 1 :(得分:3)

SqlServer在引用表时使用所有者名称。在这种情况下,dbo是所有者。

MySQL不使用所有者来表名,这就是为什么你之前没有看到这些名字的原因。

答案 2 :(得分:3)

SQL Server有一些叫做模式的东西,在这种情况下,默认模式是dbo,但它可以是你想要的任何东西。模式用于逻辑分组对象。因此,您可以创建一个Employee模式并在其中包含所有Employee表,视图,过程和函数,这样您还可以让某些用户只能访问某些模式

答案 3 :(得分:1)

告诉我您使用过的迁移工具,并让我知道数据库的版本。

问候
尤金

答案 4 :(得分:1)

如果您为登录的用户设置为“dbo”,则确实存在默认架构的问题,因为您不需要指定它。见http://msdn.microsoft.com/en-us/library/ms176060.aspx