2016-04-13 4 views
2

そこに存在しない場合、私は、次の列を含むテーブル(tblEntities)があります。 ID(アイデンティティ) MEANING(varchar型) START_DATE(日時) をSTOP_DATE(DateTime、Nullを許可)INSERT新しい行彼らはすでに

私はこのテーブルに追加したい値の長いリストを持っています。このリストは、別のテーブル(tblOther)を照会することによって得られる。

SELECT ITEMNAME 
FROM tblOther 
GROUP BY ITEMNAME 

したがって、上記のクエリによって生成された各項目について、私がしたい:

  • 上記のクエリからITEMNAMEを使用して新しい行を挿入しますtblEntitiesテーブルの意味するものとして、それはすでに「1900/1/1」としてSTART_DATEを設定し、テーブル
  • に存在しない場合は
  • 現在の日付
としてstop_dateはを設定します。

どうすればこのことができますか?それはリストからのWHERE INを使用するかどうか、またはループするためにいくつかの関数を作成する必要がありますか?このクエリを使用することができ

+1

JOINを使用することができます 'どこにも存在しない() ' –

+1

MERGEはそれをより良くすることができます https://msdn.microsoft.com/en-us/library/bb510625.aspx –

答えて

4

助けを

おかげで、

INSERT INTO tblEntities (Meaning, Start_Date, Stop_Date) 
SELECT DISTINCT(ItemName), '1900-01-01', getdate() 
FROM tblOther 
WHERE tblOther NOT IN (SELECT DISTINCT(Meaning) FROM tblEntities) 

あるいはそれ以上の最適化されたクエリについて、あなたはLEFTは、それが使用しての問題だ

INSERT INTO tblEntities (Meaning, Start_Date, Stop_Date) 
SELECT DISTINCT(ItemName), '1900-01-01', getdate() 
FROM tblOther O 
LEFT JOIN tblEntities E ON E.Meaning = O.ItemName 
WHERE O.ItemName IS NULL