0

現在、あるテーブルから別のテーブルにデータを移動しようとしています。今日尋ねた以前の質問では、insert ステートメントを使用するように勧められました。ステートメントを実行しようとすると、次のように SQL Server からエラーが発生します。

値 NULL を列 'Parent'、テーブル '*****.dbo.Product' に挿入できません。列はヌルを許可しません。INSERT は失敗します。

これは私が作成したステートメントです。

BEGIN TRANSACTION
INSERT INTO [*****].[dbo].[Product] 
([PDate]
  ,[SDate]
  ,[CreatedBy]
  ,[CreatedDate]
  ,[UpdatedBy]
  ,[UpdatedDate])
SELECT d.[PDate]
  ,d.[SDate]
  ,d.[CreatedBy]
  ,d.[CreatedDate]
  ,d.[UpdatedBy]
  ,d.[UpdatedDate]
FROM [*****].[dbo].[ProductData] AS d
JOIN [*****].[dbo].[Product] AS t
ON d.ProductDataID = t.ProductDataID
ROLLBACK TRANSACTION

データが正しく一致していることを確認する必要があります

編集: 申し訳ありませんが、スクリプトのコピー中にエラーが発生しました。UseDRM は、元のスクリプトの両方のセクションにあります。私がしたいことは、ProductData テーブルのデータを Product テーブルにコピーすることです。

4

4 に答える 4

3

Parent列はヌル可能ではなく、デフォルト値がないため、クエリに追加する必要があります。

于 2012-06-22T11:31:23.130 に答える
2
BEGIN TRANSACTION
INSERT INTO [*****].[dbo].[Product] 
([PDate]
  ,[SDate]//Check Columns no here it is  6 total
  ,[CreatedBy]
  ,[CreatedDate]
  ,[UpdatedBy]
  ,[UpdatedDate])
SELECT d.[PDate] //Check columns numbers here it is 7 here 
  ,d.[SDate]
  ,d.[UseDRM]
  ,d.[CreatedBy] 
  ,d.[CreatedDate]
  ,d.[UpdatedBy]
  ,d.[UpdatedDate]
FROM [*****].[dbo].[ProductData] AS d
JOIN [*****].[dbo].[Product] AS t
ON d.ProductDataID = t.ProductDataID
ROLLBACK TRANSACTION

修正して ください。d.[UseDRM]問題ありません。挿入されていません。

于 2012-06-22T12:01:39.700 に答える
2

選択したクエリで ISNULL を使用して、値が null であるかどうかを確認し、デフォルト値に置き換えてみてください。

例えば。:

   BEGIN TRANSACTION
    INSERT INTO [*****].[dbo].[Product] 
    ([PDate]
      ,[SDate]
      ,[UseDRM]
      ,[CreatedBy]
      ,[CreatedDate]
      ,[UpdatedBy]
      ,[UpdatedDate])
    SELECT Isnull(d.[PDate], '1/1/1900')
      ,Isnull(d.[SDate], '1/1/1900')
      ,Isnull(d.[UseDRM], "")
      ,Isnull(d.[CreatedBy], "")
      ,Isnull(d.[CreatedDate], '1/1/1900')
      ,Isnull(d.[UpdatedBy], "")
      ,Isnull(d.[UpdatedDate], '1/1/1900')
    FROM [*****].[dbo].[ProductData] AS d
    JOIN [*****].[dbo].[Product] AS t
    ON d.ProductDataID = t.ProductDataID
    ROLLBACK TRANSACTION
于 2012-06-22T11:43:31.980 に答える
0

INSERT INTO ステートメントを使用する代わりに、UPDATE ステートメントを使用する必要があったため、最終的に自分が何を間違っていたのかを突き止めました。

UPDATE [********].[dbo].[Product] 
SET [PDate] = [********].[dbo].[ProductData].[PDate]
  ,[SDate] = [********].[dbo].[ProductData].[SDate]
  ,[CreatedBy] = [********].[dbo].[ProductData].[CreatedBy]
  ,[CreatedDate] = [********].[dbo].[ProductData].[CreatedDate]
  ,[UpdatedBy] = [********].[dbo].[ProductData].[UpdatedBy]
  ,[UpdatedDate] = [********].[dbo].[ProductData].[UpdatedDate]
FROM [********].[dbo].[ProductData], [********].[dbo].[Product]
WHERE [********].[dbo].[Product].[ProductDataID] = [********].[dbo].[ProductData].[ProductDataID]

元の質問が不十分に書かれていることをお詫びします

于 2012-06-22T13:35:02.520 に答える