쿼리로는 불가능하고, 디자인을 통해서 중간에 삽입이 가능하다.

아래에 위치하고자 하는 행의 ▶를 우클릭해서 '열 삽입'을 누르면 된다.

 

select ~

order by newid();

 

일반적으로 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: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

 

다국어 지원이 있을 경우 nvarchar로 확장 구조를 만들어 두는 것이 좋다.

 

https://jeongkyun-it.tistory.com/187

 

테이블에 존재하는 레코드를 전부 삭제하고, 자동 증가열 IDENTITY를 초기화한다.

 

 

https://blog.naver.com/diceworld/220151833833

 

MSSQL 테이블 레코드 비우기 (TRUNCATE)

 - TRUNCATE 문이란?     테이블에 존재하는 모든 레코드를 삭제하는 쿼...

blog.naver.com

 

+ Recent posts