0

既存のテーブルに主キーをドロップしてから、そのテーブルにレコードを挿入する必要があるシナリオがあります。以下に示すように、テーブルには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.

この問題を解決するにはどうすればよいですか?

4

2 に答える 2

3

GUID 列のデフォルトを削除しましたが、null 可能な列ではありません。したがって、問題が発生しています。大量のデータを挿入したいが、おそらくパフォーマンス上の理由で制約が必要ない場合。次に、少なくともnull不可の列のデフォルトを削除しないでください。

于 2012-07-20T20:38:07.200 に答える
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

null を許可します。

于 2012-07-20T21:09:12.640 に答える