各位大侠,小弟遇到一个棘手的问题:
我在SqlServer中有一个名为A的表。表里有个叫TEST的字段,Varchar型,默认值('')。
我在查询分析器中用以下代码出去删除表中的这个默认值,并将TEST更名为TEST_TEST(默认值(''))。关键代码如下:
ALTER TABLE [A]
DROP CONSTRAINT DF_A_TEST
……
把TEST更名为TEST_TEST,并设默认值为('')
……
运行结果:OK。
这时我在对这个表再次进行处理,又执行到
ALTER TABLE [A]
DROP CONSTRAINT DF_A_TEST_TEST
……
这时分析器报错。说'DF_A_TEST_TEST' is not a constraint.
于是我把
ALTER TABLE [A]
DROP CONSTRAINT DF_A_TEST_TEST
注释掉,继续执行。运行结果OK。
然后我再把注释掉的
ALTER TABLE [A]
DROP CONSTRAINT DF_A_TEST_TEST
还原回来,再次执行,运行结果居然也OK了!!!如此反复,很有规律!呵呵不明白啊!!是不是我什么地方理解错了。请各位朋友指正!
如觉得100分太少,可以另行加分!
我在SqlServer中有一个名为A的表。表里有个叫TEST的字段,Varchar型,默认值('')。
我在查询分析器中用以下代码出去删除表中的这个默认值,并将TEST更名为TEST_TEST(默认值(''))。关键代码如下:
ALTER TABLE [A]
DROP CONSTRAINT DF_A_TEST
……
把TEST更名为TEST_TEST,并设默认值为('')
……
运行结果:OK。
这时我在对这个表再次进行处理,又执行到
ALTER TABLE [A]
DROP CONSTRAINT DF_A_TEST_TEST
……
这时分析器报错。说'DF_A_TEST_TEST' is not a constraint.
于是我把
ALTER TABLE [A]
DROP CONSTRAINT DF_A_TEST_TEST
注释掉,继续执行。运行结果OK。
然后我再把注释掉的
ALTER TABLE [A]
DROP CONSTRAINT DF_A_TEST_TEST
还原回来,再次执行,运行结果居然也OK了!!!如此反复,很有规律!呵呵不明白啊!!是不是我什么地方理解错了。请各位朋友指正!
如觉得100分太少,可以另行加分!
解决方案 »
- 紧急求助:Setup Factory 安装时,查找Dll中指定函数失败
- 一库多表ADO怎么样操作?
- 在一大段代码中怎样快速确定与if对应的else语句
- 如何让应用程序的进程在进程管理器中被结束的时候,警告“本进程不能被结束”???
- 用 DocumentProperties 函数VB老是异常退出!
- 怎样用代码控制Toolbar中下拉菜单的弹出?
- 在VB6.0中如何在自己的类中加入计时器!!!!!!!!!!!
- 有关在别人的程序里修改的问题
- 如何使一个BMP的图象旋转任意角度,能告诉我一个具体算法吗?
- 我用wininet.dll的API,怎样知道我的数据已经发送完毕?
- 问一个关于progressbar 进度条的问题
- 救命啊!!!请教一句sql语言
主要分为三步,但每一步操作都是用同一种方法进行操作。
第一步:我把表中TEST更名为了TEST_TEST,其它的属性都没有变(类型、默认值等)。运行结果OK。
第二步:我对更名后的表执行一次脚本。运行出错,告知:TEST_TEST这个字段不是CONSTRAINT(说明:在第一步时其实已经写了)。这时,只需注释掉ALTER TABLE [A] DROP CONSTRAINT DF_A_TEST_TEST,脚本就可以安全执行。运行结果OK。
第三步:我再对更名后的表执行一次脚本,并将注释了的ALTER TABLE [A] DROP CONSTRAINT DF_A_TEST_TEST这句脚本还原回来,运行结果OK。问题大致就是这样的。如果还是不理解,请等一等,我中午就把源码贴上来。
名称 类型 默认值
aa varchar ''
b varchar ''
c varchar ''
d datetime
e int 0--第一步:(将b->bb,运行结果OK)
Begin
ALTER TABLE [aa]
DROP CONSTRAINT DF_aa_b
End
Begin
ALTER TABLE [aa]
DROP CONSTRAINT DF_aa_c
End
Begin
CREATE TABLE [Tmp_aa] (
[aa] [varchar] (50) NOT NULL ,
[bb] [varchar] (50) NOT NULL ,
[c] [varchar] (50) NOT NULL ,
[d] [datetime] Null ,
[e] [int] NOT NULL
) ON [PRIMARY]
End
Begin
ALTER TABLE Tmp_aa ADD CONSTRAINT [DF_aa_b] DEFAULT ('') FOR [bb]
End
Begin
ALTER TABLE Tmp_aa ADD CONSTRAINT [DF_aa_c] DEFAULT ('') FOR [c]
EndBEGIN
--SET IDENTITY_INSERT Tmp_aa ON
IF EXISTS(SELECT * FROM [aa])
BEGIN
EXEC('INSERT INTO Tmp_aa (aa,bb,c,d,e)
SELECT CONVERT(varchar(50),aa),CONVERT(varchar(50),b),CONVERT(varchar(50),c),CONVERT(datetime,d),CONVERT(int(10,0),e) FROM aa TABLOCKX')
END
--SET IDENTITY_INSERT Tmp_aa OFF
END
Begin
DROP TABLE [aa]
End
Begin
EXECUTE sp_rename N'Tmp_aa', N'aa', 'OBJECT'
End
Begin
ALTER TABLE [aa] ADD CONSTRAINT [PK_aa] PRIMARY KEY CLUSTERED ([aa])
ON [PRIMARY]
End--第二步:(修改后的表再存一次盘,报错!说DF_aa_bb不是CONSTRAINT,于是将
Begin
ALTER TABLE [aa]
DROP CONSTRAINT DF_aa_bb
End
注释,执行成功!)
Begin
ALTER TABLE [aa]
DROP CONSTRAINT DF_aa_bb
End
Begin
ALTER TABLE [aa]
DROP CONSTRAINT DF_aa_c
End
Begin
CREATE TABLE [Tmp_aa] (
[aa] [varchar] (50) NOT NULL ,
[bb] [varchar] (50) NOT NULL ,
[c] [varchar] (50) NOT NULL ,
[d] [datetime] Null ,
[e] [int] NOT NULL
) ON [PRIMARY]
End
Begin
ALTER TABLE Tmp_aa ADD CONSTRAINT [DF_aa_bb] DEFAULT ('') FOR [bb]
End
Begin
ALTER TABLE Tmp_aa ADD CONSTRAINT [DF_aa_c] DEFAULT ('') FOR [c]
EndBEGIN
--SET IDENTITY_INSERT Tmp_aa ON
IF EXISTS(SELECT * FROM [aa])
BEGIN
EXEC('INSERT INTO Tmp_aa (aa,bb,c,d,e)
SELECT CONVERT(varchar(50),aa),CONVERT(varchar(50),bb),CONVERT(varchar(50),c),CONVERT(datetime,d),CONVERT(int(10,0),e) FROM aa TABLOCKX')
END
--SET IDENTITY_INSERT Tmp_aa OFF
END
Begin
DROP TABLE [aa]
End
Begin
EXECUTE sp_rename N'Tmp_aa', N'aa', 'OBJECT'
End
Begin
ALTER TABLE [aa] ADD CONSTRAINT [PK_aa] PRIMARY KEY CLUSTERED ([aa])
ON [PRIMARY]
End--第三步:(再一次对表进行存盘,恢复第二步注释的内容,运行结果OK)
Begin
ALTER TABLE [aa]
DROP CONSTRAINT DF_aa_bb
End
Begin
ALTER TABLE [aa]
DROP CONSTRAINT DF_aa_c
End
Begin
CREATE TABLE [Tmp_aa] (
[aa] [varchar] (50) NOT NULL ,
[bb] [varchar] (50) NOT NULL ,
[c] [varchar] (50) NOT NULL ,
[d] [datetime] Null ,
[e] [int] NOT NULL
) ON [PRIMARY]
End
Begin
ALTER TABLE Tmp_aa ADD CONSTRAINT [DF_aa_bb] DEFAULT ('') FOR [bb]
End
Begin
ALTER TABLE Tmp_aa ADD CONSTRAINT [DF_aa_c] DEFAULT ('') FOR [c]
EndBEGIN
--SET IDENTITY_INSERT Tmp_aa ON
IF EXISTS(SELECT * FROM [aa])
BEGIN
EXEC('INSERT INTO Tmp_aa (aa,bb,c,d,e)
SELECT CONVERT(varchar(50),aa),CONVERT(varchar(50),bb),CONVERT(varchar(50),c),CONVERT(datetime,d),CONVERT(int(10,0),e) FROM aa TABLOCKX')
END
--SET IDENTITY_INSERT Tmp_aa OFF
END
Begin
DROP TABLE [aa]
End
Begin
EXECUTE sp_rename N'Tmp_aa', N'aa', 'OBJECT'
End
Begin
ALTER TABLE [aa] ADD CONSTRAINT [PK_aa] PRIMARY KEY CLUSTERED ([aa])
ON [PRIMARY]
End
为什么会出现上述情况呢?是不是我什么地方理解错了?或代码写错了?
请各位大侠赐教!期待中……