【发布时间】: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