일반적으로 select문으로 한 행 이상을 조회했을 때 @@ROWCOUNT는 1 이상이 나온다.

그러나 with nolock 구문으로 데이터 무결성을 무시하고 조회하거나, set nocount on으로 @@ROWCOUNT 값을 0으로 초기화하는 경우 꼭 1 이상이 나온다고 보장할 수 없다.

 

더보기

일반적으로 SELECT 문으로 한 행을 조회했을 때 @@ROWCOUNT 값은 1이 됩니다. 그러나 예외적인 상황에서는 @@ROWCOUNT 값이 0 이하로 나올 수 있습니다.

예를 들어, 다음과 같은 상황에서 @@ROWCOUNT 값은 0이 됩니다:

  • SELECT 문에 WHERE 절에서 조회할 조건이 없는 경우
  • SELECT 문에서 조회할 테이블이 비어있는 경우
  • SELECT 문에서 조회된 행이 이미 삭제되었거나 갱신되어 변경된 경우

또한, 일부 상황에서는 @@ROWCOUNT 값이 0이 될 수도 있습니다. 예를 들어, 다음과 같은 상황에서 @@ROWCOUNT 값은 0이 될 수 있습니다:

  • SELECT 문에서 WITH NOLOCK 힌트를 사용하여 데이터 무결성을 무시하고 조회하는 경우
  • SELECT 문에서 SET NOCOUNT ON 문을 사용하여 @@ROWCOUNT 값을 0으로 초기화하는 경우

따라서, SELECT 문으로 한 행을 조회했을 때 @@ROWCOUNT 값이 0 이하로 나올 수 있으며, 이는 예외적인 상황에서 발생하는 것이므로 주의가 필요합니다. 일반적으로는 @@ROWCOUNT 값이 1 이상이면 결과 집합에 행이 포함되어 있다는 것을 의미하므로, 이를 확인하여 적절한 처리를 수행해야 합니다.

두 테이블이 있는데, A 테이블에서의 c 컬럼의 값이 B 테이블에서의 c 컬럼 값에 존재한다면 insert를 해야 했다. 그래서 merge문을 사용했는데, 문제가 생겼었다.

 

		MERGE INTO A AS a
		USING B AS b
			ON (a.c = b.c)
		WHEN NOT MATCHED THEN
			INSERT A VALUES (~);

이런 식으로 작성했었다가 '조건이 필요한 컨텍스트에 부울이 아닌 유형의 식이 지정되었습니다' 라는 오류 메시지가 떴었다.

 

		MERGE INTO A AS a
		USING B AS b
			ON (a.c = b.c)
		WHEN NOT MATCHED THEN
			INSERT (values의 컬럼명, values의 컬럼명, ...) VALUES (~);

 

insert 뒤에 타겟 테이블이 아니라 컬럼명을 지정해 주어야 되는 거였다.

 

 

 

출처: ChatGPT

더보기

해당 오류는 MERGE 문에서 WHEN NOT MATCHED THEN 절 뒤에 오는 INSERT 문에서 값을 지정할 때 컬럼명을 생략하여 발생할 수 있습니다.

이 문제를 해결하려면 INSERT 문에서 명시적으로 컬럼을 지정하거나, VALUES 키워드를 생략하고 SELECT 절을 사용하여 값을 지정하면 됩니다.

다음은 INSERT 문에서 컬럼을 명시적으로 지정하여 해결하는 방법입니다.

 

sqlCopy code
DECLARE @tbl_mail_temp TABLE (mail_sn BIGINT, to_user_sn BIGINT, mail_type TINYINT, send_date DATETIME, mail_state TINYINT, mail_title_idx INT, mail_text_idx INT, due_date DATETIME) MERGE INTO dbo.tbl_system_mail_to_all_state AS a USING @tbl_mail_temp AS b ON (a.mail_sn = b.mail_sn) WHEN NOT MATCHED THEN INSERT (mail_sn, to_user_sn, mail_state) VALUES (b.mail_sn, @user_sn, 2);

위 예제에서는 INSERT 문에서 mail_sn, to_user_sn, mail_state 컬럼을 명시적으로 지정하였습니다. 따라서 오류가 발생하지 않습니다.

만약 VALUES 키워드를 생략하고 SELECT 절을 사용하여 값을 지정하려면 다음과 같이 작성할 수 있습니다.

sqlCopy code
DECLARE @tbl_mail_temp TABLE (mail_sn BIGINT, to_user_sn BIGINT, mail_type TINYINT, send_date DATETIME, mail_state TINYINT, mail_title_idx INT, mail_text_idx INT, due_date DATETIME) MERGE INTO dbo.tbl_system_mail_to_all_state AS a USING @tbl_mail_temp AS b ON (a.mail_sn = b.mail_sn) WHEN NOT MATCHED THEN INSERT (mail_sn, to_user_sn, mail_state) SELECT b.mail_sn, @user_sn, 2;

위 예제에서는 VALUES 대신 SELECT 절을 사용하여 값을 지정하였습니다. SELECT 절에서는 컬럼명을 명시적으로 지정하지 않아도 됩니다.

 

 

 

 

1. svn resolve

2. svn cleanup

3. svn update

 

순으로 진행하면 해결된다.

 

 

출처

https://stackoverflow.com/questions/2406469/svn-remains-in-conflict

 

SVN remains in conflict?

How do I get this directory out of conflict? I don't care if it's resolved using "theirs" or "mine" or whatever... PS C:\Users\Mark\Desktop\myproject> svn ci -m "gr" svn: Commit failed (details

stackoverflow.com

 

'개인 공부 > ' 카테고리의 다른 글

[mantis] 버그 추적 프로그램  (0) 2022.10.06

다:대 관계를 1:1 관계로 만들어서 join해야 함.

 

https://royzero.tistory.com/69

 

[SQL] GROUP BY란? - 기본편

이전 시간에는 SQL의 데이터 조작 언어(DML) 중에서 SELECT의 기본적인 사용법과 결합(JOIN)과 별칭 등에 대해서 다뤄보았습니다. 이번 시간에는 SELECT의 조건절인 WHERE문 다음에 오는 GROUP BY에 대해 이

royzero.tistory.com

 

http://www.gurubee.net/article/80414

 

특정 조건으로 sum값 구하는 방법이 있을까요?

A테이블 xid contractMoney  10   1000,000 B테이블 Bid   xid   payMoney  1    &nbs..

www.gurubee.net

 

괄호로 감싸면 된다.

 

select top (@declare_var) from tbl_A

 

 

https://blog.danggun.net/2228

 

[MSSQL] 'TOP'를 사용할때 변수를 넣어 사용하기

별생각없이 Select TOP @nTemp From @table; 이렇게 작성 했더니 '[변수]'근처의 구문이 잘못되었습니다. 필요 REAL, INTEGER, NUMERIC 또는 '('. 이런 에러가 ㅡ,.ㅡ;; 에라이~ 1. 'TOP'에 변수를 사용할 수 있다.'TOP'

blog.danggun.net

 

+ Recent posts