2012-02-06 3 views
6

테이블에 값을 프로그래밍 방식으로 입력하려고합니다.where 절을 사용하여 값에 삽입

직선을 사용할 수 없습니다. @variables를 선택하십시오. 값 키워드를 사용해야합니다.

삽입 할 값을 사용할 때 어떻게 where 절을 만들 수 있습니까? 당신이 MYID 열이 중복 된이 없는지 확인하려는 경우

내가 중복

DECLARE @MyID INT 
    DECLARE @Phone varchar(10) 
    DECLARE @MyDATE DateTime 
    DECLARE @Agent as varchar(50) 
    DECLARE @Charge as varchar(50) 
    DECLARE @Vendor as varchar(50) 

    SET @MyID = 215199999 
    SET @Phone = '9999999999' 
    SET @MyDATE = '2010-12-04 11:56:12.000' 
    SET @Agent = 'fbrown' 
    SET @Charge = 'NO' 
    SET @Vendor = 'NO' 

    INSERT INTO [MyDB].[dbo].[Accounts] 
    (MyID,Phone,MyDate,Agent,Charge,Vendor) 
    VALUES (
    @MyID 
    ,@Phone 
    ,@MyDATE 
    ,@Agent 
    ,@Charge 
    ,@Vendor 
) WHERE MyID NOT IN (@MyID) 
+0

왜 삽입에 where 절을 사용합니까? 중복되지 않은 것을 실제로 삽입하려고합니까? –

+0

예. 중복을 피하려고 시도합니다. –

+0

개념이 아닙니다. 다른 쿼리에서 데이터를 선택하는 경우 데이터 소스에서 'WHERE' 절이 의미가 있습니다. – HABO

답변

22
IF NOT EXISTS(SELECT 1 FROM [MyDB].[dbo].[Accounts] WHERE MyID = @MyID) 
    INSERT INTO [MyDB].[dbo].[Accounts] 
     (MyID, Phone, MyDate, Agent, Charge, Vendor) 
     VALUES 
     (@MyID, @Phone, @MyDATE, @Agent, @Charge, @Vendor) 
1

을 피하기 위해 노력하고, 적어도 3 선택할 수 있습니다 는 1)을 고유 한 열 (해당 열에 대한 색인을 작성하고 고유 또는 더 나은 기본 키로 선언) 2) 열을 자동 증가시킵니다. 이렇게하면 값을 할당 할 필요조차 없습니다. 4) Joe Stefanelli의 솔루션을 사용할 수 있습니다 (이 스레드에서). 프로그래머에게 친숙하며 원하는 값을 지정할 수 있습니다.

3

시도 또한

if not exists (select top 1 * from [MyDB].[dbo].[Accounts] Where MyID = @MyID) 
INSERT INTO [MyDB].[dbo].[Accounts] 
    (MyID,Phone,MyDate,Agent,Charge,Vendor) 
    VALUES (
    @MyID 
    ,@Phone 
    ,@MyDATE 
    ,@Agent 
    ,@Charge 
    ,@Vendor 
) 
+2

이것은 http://stackoverflow.com/a/9166197/496972의 복제본입니다. –

+0

예, 맞습니다. 게시하는 동안 조 응답을 보지 못했습니다 .. –

+0

정말로 내 게시물을 삭제하려면 그냥 업데이트하고 싶습니다. 나 그래서 내 게시물을 삭제할 수 있습니다 –

0

병합을 사용하여 (UPSERT) 옵션을 실행에게 하나의 좋은 방법입니다. 이 예에서 일치하는 항목은 채워지지 않지만 WHEN의 일치 된 문을 추가하고 타임 스탬프 또는 카운터를 업데이트 할 수 있습니다.

MERGE 
    Accounts AS target 
USING 
(select @MyID as myID) AS source 
ON 
    target.myID = source.myID 

WHEN NOT MATCHED THEN 
INSERT (MyID,Phone,MyDate,Agent,Charge,Vendor) 
    VALUES (
    @MyID 
    ,@Phone 
    ,@MyDATE 
    ,@Agent 
    ,@Charge 
    ,@Vendor 
); 
+0

Ps 이 주제는 4,5 년 전입니다. :-) – Tenzin

+4

@Tenzin 그래서 뭐야? 사람들이 더 이상 같은 질문에 대한 답을 찾지 않는다는 의미는 아닙니다. – DixonD

관련 문제