2

マスター、エレメント、チェックの 3 つのテーブルがあります。

主人

master_id,           
master_name,

エレメント

element_id,                                
element_name,                                

小切手

(master_id)
(element_id)
check_id
check_name
description 

from table やfrom tablecheckなどcheck_id,check_name,descriptionでテーブルに値を挿入したい。master_idmasterelement_idelement

次のクエリを試しました。

insert 
into CHECK values((select e.ELEMENT_ID,m.MASTER_ID from MASTER as m,ELEMENT as e where m.MASTER_ID=3 and ELEMENT_ID=3),'M001','chkitem1','Check description',)

次のエラーが表示されます。

メッセージ 116、レベル 16、状態 1、行 1
サブクエリが EXISTS で導入されていない場合、選択リストに指定できる式は 1 つだけです。

メッセージ 213、レベル 16、状態 1、行 1
列名または指定された値の数がテーブル定義と一致しません。

誰でもこれについてのアイデアを与えることができます..?

4

1 に答える 1

4

あなたはどちらかのようなものを持つことができます

INSERT INTO dbo.Yourtable(list of columns)
VALUES (list of scalar, atomic values)

ただし、アトミックなスカラー値 (リテラルまたは変数) を提供する必要があります。

または、この構文を使用します

INSERT INTO dbo.YourTable(list of columns)
  SELECT (list of columns) 
  FROM dbo.YOurSourceTable ......

ただし、この場合はキーワードを指定しません。VALUES

したがって、あなたの場合、試してください:

INSERT INTO dbo.CHECK(master_id, element_id, check_id, check_name, description)
  SELECT 
      e.ELEMENT_ID, m.MASTER_ID, 'M001', 'chkitem1', 'Check description'
  FROM 
      dbo.MASTER AS m
  INNER JOIN
      dbo.ELEMENT AS e ON m.MASTER_ID = e.ELEMENT_ID
  WHERE
       m.Master_ID = 3

FROMまた、句内のテーブルのリストをコンマで区切るだけの古いスタイルの JOIN を使用しないでください。これは、20 年以上前にSQL-92標準で廃止されました。INNER JOINまたはのLEFT OUTER JOIN代わりに適切な ANSI JOIN を使用してください。

更新:わかりました。最初にテーブルに何かを挿入しているようです(質問からは明確ではありませんでした)。次に、それを後続の挿入でMaster使用したい-これを試してください:SCOPE_IDENTITY

INSERT INTO dbo.Master(list-of-columns) VALUES(.........)

DECLARE @MasterID INT
SELECT @MasterID = SCOPE_IDENTITY()

INSERT INTO dbo.CHECK(master_id, element_id, check_id, check_name, description)
  SELECT 
      e.ELEMENT_ID, @MasterID, 'M001', 'chkitem1', 'Check description'
  FROM 
      dbo.MASTER AS m
  INNER JOIN
      dbo.ELEMENT AS e ON m.MASTER_ID = e.ELEMENT_ID
  WHERE
       m.Master_ID = @MasterID
于 2013-09-19T05:05:32.723 に答える