【问题标题】:Why does SQL Server Management Scripting ignores the version?为什么 SQL Server 管理脚本会忽略版本?
【发布时间】:2011-04-12 03:32:35
【问题描述】:

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

完成上述操作后,我进入表格,对其进行设计,将 (100) 更改为 (255),然后单击 Generate Change Script。

结果包含以下一些不会在 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 脚本来实现(不)兼容性?那这个“选项”有什么作用呢?

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

【问题讨论】:

  • 在 Microsoft Connect 站点上报告问题。
  • @Denis 是的,为了安全起见,我重新启动了整个机器,当然包括 SQL 服务,因为它是本地的。
  • @ismail 如果我认为这是一个错误,我肯定会这样做;我期待这是我做错的事情。 :)

标签: sql-server scripting compatibility


【解决方案1】:

尝试在数据库的上下文菜单中使用 Generate scripts... -> Tasks -> Generate scripts... 并在此处选择“Script for Server Version”。

【讨论】:

  • 虽然这确实生成了一个很好的 sql 2000 脚本(据我所知),但这与生成更改脚本不同。另一个脚本与数据库无关,我可以在任何数据库上使用它来执行所需的更改(修改列大小),这个脚本是创建同一个表(如果需要,还可以创建它的数据)。
【解决方案2】:

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

或者拥有真正灵活的 Prod DBA,他们只需在字里行间阅读并为您修复代码。 :)

【讨论】:

  • 是的,这就是我们所做的。我们有一个 SQL2000,它通常对“其他人”来说是安全的。 :)
猜你喜欢
  • 2010-11-08
  • 2010-10-26
  • 2010-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
相关资源
最近更新 更多