0
Create Procedure ssp_InsertClientDefaults(
@cid int
)
AS
BEGIN
INSERT INTO ClientTermData
  (ClientID, TermID, NormCount, NormProb, DiscCount, DiscProb, Weight) 
WHERE NOT EXISTS
  (SELECT 
   @cid, GlobalTermData.TermID, GlobalTermData.NormCount, GlobalTermData.NormProb, 
   GlobalTermData.DiscCount, GlobalTermData.DiscProb, GlobalTermData.Weight 
   FROM GlobalTermData, DefaultTerms 
  WHERE DefaultTerms.TermID = GlobalTermData.TermID);
END
GO

'Where'でエラーが発生します。何が悪いのかわからない。

4

4 に答える 4

1

あなたが意味したかもしれないことはこれでした:

Create Procedure ssp_InsertClientDefaults
(
        @cid int
    )
AS
        BEGIN
            Insert into ClientTermData(ClientID,TermID,NormCount,NormProb,DiscCount,DiscProb,Weight) 
                Select @cid, GlobalTermData.TermID, GlobalTermData.NormCount, 
                   GlobalTermData.NormProb,GlobalTermData.DiscCount,GlobalTermData.DiscProb,
                    GlobalTermData.Weight 
                from GlobalTermData
                Where not exists( Select 1 
                                  from GlobalTermData INNER JOIN DefaultTerms 
                                  on DefaultTerms.TermID = GlobalTermData.TermID
                                  where DefaultTerms.TermID = GlobalTermData.TermID
                                -- And possibly some other exclusion filter using @cid here
                    );
        END
GO

編集

説明-他の人が指摘しているように、where句からこの方法で挿入に'select'列を戻すことはできません。また、exists関数は、ほぼすべてをチェックできます。すべての列をexistsに配置する必要はありません。最後に、スタイルの問題が多くなりますが、where結合条件を使用した相互結合ではなく、内部結合を実行することをお勧めします。

于 2012-08-16T14:40:38.137 に答える
0

WHEREそのように句を使用することはできません。INSERT..INTOsintaxについてはMSDNを確認してください

次のようなことをする必要があります。

INSERT your_table(your_columns)
SELECT your_values
  FROM other_table
 WHERE your_where_conditions
于 2012-08-16T14:35:52.790 に答える
0

完全にはわかりませんが、?VALUES ('foo','bar')の後に挿入物の一部が欠けていませんINSERT INTO (derp,cookies)か?

于 2012-08-16T14:33:35.190 に答える
0

値リストがありません。where句を挿入ステートメントの値リストにすることはできません。selectステートメントが必要です。クエリは次のようになります。


Create Procedure ssp_InsertClientDefaults( 
@cid int 
) 
AS 
BEGIN 
Insert into ClientTermData(ClientID,TermID,NormCount,NormProb,DiscCount,DiscProb,Weight) 
select [something] from [table]
Where not exists( Select @cid,GlobalTermData.TermID,GlobalTermData.NormCount,GlobalTermData.NormProb,GlobalTermData.DiscCount,GlobalTermData.DiscProb,GlobalTermData.Weight from GlobalTermData,DefaultTerms where DefaultTerms.TermID = GlobalTermData.TermID); 

END 
GO 



また、selectvalueリストはinsertintoステートメントと一致する必要があることを忘れないでください。

于 2012-08-16T14:33:38.280 に答える