为什么SQL Server管理脚本忽略该版本?

时间:2010-09-14 12:18:51

标签: sql-server scripting compatibility

我需要将表中字段的大小从VARCHAR(100)增加到VARCHAR(255)。由于不同的原因,这会导致表被删除并重新创建(以及关系,FK等)。但这是可以接受的,我在SQL2008R2(快速)(或2008 Express,同样的结果)中执行此更改,但脚本在SQL2000中不起作用(并且必须),尽管我设置了sql2000脚本compat的即可。

Management Studio Options

完成上述操作后,我转到表格,设计它,将(100)更改为(255)并单击生成更改脚本。

结果包含以下一些在SQL 2000下执行的内容:

BEGIN TRANSACTION
GO
ALTER TABLE dbo.mytable
    DROP CONSTRAINT FK_mytable_othertable
GO
ALTER TABLE dbo.othertable SET (LOCK_ESCALATION = TABLE)
GO
COMMIT

SET(LOCK_ESCALATION)在SQL 2000下不起作用。

其他SQL2005 / 8>我看到的是:

WITH (HOLDLOCK TABLOCKX)

ALTER TABLE dbo.mytable ADD CONSTRAINT
    PK_mytable PRIMARY KEY CLUSTERED 
    (
    idmytable
    ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
 ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

GO

所有“WITH”事物都不属于SQL 2000。

为什么SQL Management Studio脚本兼容(in)?那个“选项”到底是做什么的?

编辑:我在Microsoft Connect上提交了一个错误,直到有人证明我错了:)你可以找到它here

2 个答案:

答案 0 :(得分:0)

尝试在数据库的上下文菜单中使用生成脚本...>任务 - >生成脚本...并在那里选择“Script for Server Version”。

答案 1 :(得分:0)

我感觉到你的痛苦。这就是为什么当我们必须为prod部署生成脚本时,最好使用适合版本的GUI生成它们。即:查询分析器2000,SSMS 2005,SSMS 2008.并保持一个等效的临时环境来测试您的脚本。

或者拥有非常灵活的Prod DBA,只需在行之间读取并修复代码即可。 :)