【问题标题】:Correct SQL to convert mySQL tables to SQL Server tables更正 SQL 以将 mySQL 表转换为 SQL Server 表
【发布时间】:2012-02-29 11:52:22
【问题描述】:

我需要将许多表从 mySQL 转换为 SQL Server。

mySQL 表的示例是

CREATE TABLE `required_items` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Unique Barcode ID',
`fk_load_id` INT( 11 ) NOT NULL COMMENT 'Load ID', 
`barcode` VARCHAR( 255 ) NOT NULL COMMENT 'Barcode Value',
`description` VARCHAR( 255 ) NULL DEFAULT NULL COMMENT 'Barcode Description',
`created` TIMESTAMP NULL DEFAULT NULL COMMENT 'Creation Timestamp',
`modified` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Modified Timestamp',
FOREIGN KEY (`fk_load_id`) REFERENCES `loads`(`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB CHARACTER SET ascii COLLATE ascii_general_ci COMMENT = 'Contains Required Items for the Load';

以及更新创建日期的触发器

CREATE TRIGGER required_items_before_insert_created_date BEFORE INSERT ON `required_items`
FOR EACH ROW
BEGIN
  SET NEW.created = CURRENT_TIMESTAMP;
END

现在我需要在 SQL Server 中创建与此类似的表。似乎有很多不同的数据类型可用,所以我不确定使用哪个。

  • 主键列应该使用什么数据类型 (唯一标识符,bigint,int)?
  • 我应该为时间戳使用什么 (时间戳,数据时间,日期时间2(7))?
  • 我应该如何执行创建的 和修改过的时间戳(目前我正在使用触发器)?
  • 如何强制执行外键约束。
  • 我应该在 SQL Server 中使用 Varchar(255) 吗? (也许 Text,Varchar(MAX) 更好)

我正在使用 Visual Studio 2010 创建表格。

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    首先,您可能可以使用 PHPMyAdmin(或类似的东西)将表创建过程编写到 SQL Server 中。您可以查看自动为您创建的内容,以了解您应该使用什么。之后,您应该看看 SSMS (SQL Server Management Studio) 而不是 Visual Studio 2010。在 SSMS 中调整您的脚本将创建的表会更容易 - 事实上,大多数数据库开发任务在 SSMS 中会更容易。

    我应该对主键列使用什么数据类型(uniqueidentifier、bigint、int)? 根据您计划在表中拥有多少记录,使用 int 或 bigint。您可能希望避免使用 uniqueidentifiers 的问题。 INT vs Unique-Identifier for ID field in database

    我应该为时间戳使用什么(timestamp、datatime、datetime2(7))? SQL Server 中的时间戳与 MySQL 中的时间戳不同。尽管名称如此,时间戳是一个递增的数字,用作版本行的机制。 http://msdn.microsoft.com/en-us/library/ms182776%28v=sql.90%29.aspx 。简而言之,出于兼容性目的,datetime 可能是您的最佳选择。

    我应该如何强制执行创建和修改的时间戳(目前我正在使用触发器)? 看上面。此外,“时间戳”的 SQL Server 版本由 DBMS 自动更新。如果您需要类似于您的 MySQL 版本的时间戳,您可以使用触发器来执行此操作(但这通常是不受欢迎的......真的有点教条)。

    如何强制执行外键约束。 您应该像使用 innoDB 一样对待它们。有关创建外键约束的示例,请参阅本文http://blog.sqlauthority.com/2008/09/08/sql-server-%E2%80%93-2008-creating-primary-key-foreign-key-and-default-constraint/

    我应该在 SQL Server 中使用 Varchar(255) 吗? (也许 Text,Varchar(MAX) 更好) 这取决于您计划在现场存储的数据。 Varchar max 等价于 varchar(8000),如果您不需要 varchar(255),则始终可以将其设置为较低的值,例如 varchar(50)。使用太大的字段大小会影响性能。需要注意的一点是,如果您计划在您的领域中支持 unicode(多语言)数据,请使用 nvarchar 或 nchar。

    【讨论】:

      猜你喜欢
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      • 2018-12-22
      • 2010-11-13
      • 1970-01-01
      • 2019-02-05
      • 2019-09-02
      • 2015-06-29
      相关资源
      最近更新 更多