有一种情况我必须在现有表上删除主键,然后在其中插入记录。该表有一个名为GUID的列,如下所示
Create Table TEST_TABLE_VALUE (
TEST_TABLE_ID int Identity(1,1),
TEST_TABLE_VALUE int,
GUID uniqueidentifier Not Null Default newid(),
Primary Key (TEST_TABLE_ID, TEST_TABLE_VALUE)
)
使用以下代码删除约束
Declare @TableName nvarchar(100)
Declare @TableId int
Declare @ConstraintName varchar(120)
Declare @IndexName varchar(120)
Declare @Command varchar(256)
Set @TableName = 'TEST_TABLE_VALUE'
Select @TableId = id From sysobjects Where [type]='U' and [name]=@TableName
Declare ConstraintDropCursor Cursor Local Fast_Forward
For Select name from sysobjects where (type='K' Or type='D' or type='F' or type='C') and parent_obj = @TableId
For Read Only
Open ConstraintDropCursor
Fetch Next From ConstraintDropCursor Into @ConstraintName
While @@Fetch_Status != -1
Begin
Set @Command = 'Alter Table dbo.' + @TableName + ' Drop Constraint ' + @ConstraintName
exec(@Command)
Fetch Next From ConstraintDropCursor Into @ConstraintName
End
Close ConstraintDropCursor
DeAllocate ConstraintDropCursor
当我尝试将数据插入表中时删除约束
Insert Into TEST_TABLE_VALUE (TEST_TABLE_VALUE) Values(1)
但得到以下错误:
Cannot insert the value NULL into column 'GUID', table 'CustApp1.dbo.TEST_TABLE_VALUE1'; column does not allow nulls. INSERT fails.
我该如何解决这个问题?
答案 0 :(得分:3)
您已删除GUID列的默认值,并且它不是可空列。因此它导致了问题。如果你想插入大量数据,并且不希望限制可能的性能原因。然后至少不要删除不可空列的默认值。
答案 1 :(得分:0)
如果您删除默认约束,那么最终会使用
Create Table TEST_TABLE_VALUE (
TEST_TABLE_ID int Identity(1,1),
TEST_TABLE_VALUE int,
GUID uniqueidentifier Not Null,
Primary Key (TEST_TABLE_ID, TEST_TABLE_VALUE)
)
因此,如果您希望继续沿着此路径前进,则必须为GUID列提供值
或者也是
ALTER TABLE TEST_TABLE_VALUE ALTER COLUMN GUID uniqueidentifier NULL
允许空值。