2016-06-06 2 views
-4

두 개의 테이블이 있습니다. 첫 번째 테이블에서 나는 열 ID, 이름, ID (첫 번째 테이블에서) 존재하는 경우 두 번째 테이블에서 확인하려면 다음 이름을 업데이트 할 싶어요. ID가없는 경우 ID, 이름을 삽입하십시오.id (각 SQL 행에 대해)가있을 경우 update

이 코드를 사용하고 있지만 작동하지 않습니다.

System.Data.SqlClient.SqlCommand CheckNone = new System.Data.SqlClient.SqlCommand("IF EXISTS(SELECT id from test) SELECT 1 ELSE SELECT 0", con); 
con.Open(); 
var result = (int)CheckNone.ExecuteScalar(); 
if (result == 0) 
{ 
    cmd = new SqlCommand(" insert into test(id,name) select id,name from Tamio.dbo.memberform", con); 
    cmd.ExecuteNonQuery(); 
    con.Close(); 
} 
else 
{ 
    SqlCommand cmd = new SqlCommand(" update test set test.name select memberform.name from Tamio.dbo.memberform", con); 
    cmd.ExecuteNonQuery(); 
    con.Close(); 

나는 성공하길 원한다. enter image description here

+3

1) 왜 3 개의 쿼리로 분할했는지, 왜 3 개의 단일 쿼리로 만들지 않습니까? 2) "작동하지 않는다"에 대해 더 구체적으로 설명해야합니다. 어떤 방식으로 작동하지 않습니까? 구체적인 행동이나 오류를 알려주십시오. –

+0

이 코드는 두 문장으로 작동합니다. 처음에는 insert를 만들고, 두 번째는 update합니다. 이 두 가지 상황을 결합하고 싶습니다. 어떻게하면 3 줄짜리 단일 쿼리로 만들 수 있습니까? – Dim

+3

Sql 서버에는 이러한 종류의 (특히 "upsert"라고도 함) 전용으로 설계된 [merge] (https://msdn.microsoft.com/en-us/library/bb510625.aspx) 문이 있습니다. –

답변

1

IF EXISTS(SELECT id from test) SELECT 1 ELSE SELECT 0 

돌아갑니다 그 메모리 에서처럼 꺼져있을 수 있지만 병합하면됩니다.

MERGE 
    table2 AS target 
USING 
    table1 AS source 
ON 
    target.id = source.id 
WHEN MATCHED THEN 
    UPDATE SET target.name = source.name 
WHEN NOT MATCHED THEN 
    INSERT (id, name) VALUES (source.id, source.name); 
-1

3 쿼리를 사용하는 이유는 무엇입니까? 확인하십시오 :

IF EXISTS(SELECT id from test) UPDATE test SET *test.name (SELECT memberform.name FROM Tamio.dbo.memberform)*; ELSE INSERT INTO test(id,name) SELECT id,name FROM Tamio.dbo.memberform; 

그러나 귀하의 업데이트 코드는 유효하지 않습니다. 아마 그 문제의 원인 :). ID가 어떤 식 으로든
조차 유효한 구문

update test set test.name select memberform.name from Tamio.dbo.memberform 

구문의 행을 일치하지 않습니다

업데이트가 존재하는 한 어떤경우

+0

작동하지 않습니다. SELECT memberform.name FROM Tamio.dbo.memberform은 모든 행을 반환합니다. 행과 일치하지 않습니다. – Paparazzi

+0

그 이유는 내가 그 * 아이콘으로 분명하게 만들었습니다. –

+0

그래서 당신은 그것이 작동하지 않는다는 것을 알았고 그 어떤 것들이 그 것을 분명하게 만들었는지 알았습니까? – Paparazzi