2012-08-16 4 views
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'로 오류가 발생했습니다. 뭐가 잘못 됐는지 나는 알 수 없다.이 mssql 문에 문제가 있습니까?

답변

1

을 where 절에서 'select'열을 반환 할 수 없다고 지적했습니다. 이 방법으로 삽입물로 돌아갑니다. 또한 exist 함수는 모든 것을 확인할 수 있습니다. 모든 열을 exist에 둘 필요가 없습니다. 마지막으로 더 많은 스타일 문제가 있지만 어디 조인 조건으로 교차 조인을하는 대신 내부 조인을 수행하는 것이 좋습니다.

0

나는 완전히 확신 할 수는 없지만 INSERT INTO (derp,cookies) 뒤에 삽입물의 VALUES ('foo','bar') 부분이 누락되지 않았습니까?

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 


 

또한 선택 값 목록이 insert into 문과 일치해야합니다.

0

그런 식으로는 WHERE 절을 사용할 수 없습니다. INSERT..INTO sintax에 대한 MSDN을 확인

당신은 같은 것을 수행해야합니다 설명

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 

편집

- 다른 사람과 같이 당신이 있었다이 의미가 있습니다 무엇

INSERT your_table(your_columns) 
SELECT your_values 
    FROM other_table 
WHERE your_where_conditions 
관련 문제