[SQL] 횟수에 따라 ELSE 문은 다른 삽입 문을 실행할 경우 사용
SQL횟수에 따라 ELSE 문은 다른 삽입 문을 실행할 경우 사용
내가 내 데이터베이스를 검색하고있는 동안 나는 특정 항목이 존재하지 않는 것을 발견하면, 나는 INSERT 문을 실행하고, 좀 더이 항목 중 하나를 찾거나 경우에 나는 다른 INSERT 문을 실행합니다.
나는 완전히 IF ELSE 표현을 사용하는 방법을 모르겠습니다.
내가 지금까지 가지고하는 것은 시간 대상 데이터가 나타납니다의 수를 계산하는 문이다; 이 0보다 큰 경우, 그것은 FALSE를 인쇄 할 수없는 경우는, TRUE 인쇄됩니다. 저는 제가 두 개의 서로 다른 INSERT 문을 실행하려면이 옵션을 사용하는 방법을 이해하는 데 도움이되는 예제를 찾을 수 없습니다.
여기에 지금까지 무엇을 가지고 :
SELECT CASE WHEN COUNT(*)>0 THEN 'TRUE' ELSE 'FALSE' END
(
SELECT [Some Column], COUNT(*) TotalCount
FROM INCIDENTS
WHERE [Some Column] = 'Target Data'
GROUP BY [Some Column]
)
해결법
-
==============================
1.필요에 따라 여기에 몇 가지 방법은 다음과 같습니다 :
필요에 따라 여기에 몇 가지 방법은 다음과 같습니다 :
IF EXISTS (SELECT * FROM TABLE WHERE COLUMN = 'SOME VALUE') --INSERT SOMETHING ELSE --INSERT SOMETHING ELSE
아니면 조금 더
DECLARE @retVal int SELECT @retVal = COUNT(*) FROM TABLE WHERE COLUMN = 'Some Value' IF (@retVal > 0) BEGIN --INSERT SOMETHING END ELSE BEGIN --INSERT SOMETHING ELSE END
-
==============================
2.사용은 다음과 같이 EXISTS에만큼 당신이 카운트 만 개 이상의 공에 기반을 찾을 필요, 그것은 더 :
사용은 다음과 같이 EXISTS에만큼 당신이 카운트 만 개 이상의 공에 기반을 찾을 필요, 그것은 더 :
IF EXISTS (SELECT 1 FROM INCIDENTS WHERE [Some Column] = 'Target Data') BEGIN -- TRUE Procedure END ELSE BEGIN -- FALSE Procedure END
-
==============================
3.IF가 존재
IF가 존재
IF exists (select * from table_1 where col1 = 'value') BEGIN -- one or more insert into table_1 (col1) values ('valueB') END ELSE -- zero insert into table_1 (col1) values ('value')
-
==============================
4.당신이 무엇을 의미하지 않음 매우 취소
당신이 무엇을 의미하지 않음 매우 취소
. 그것은 당신이 후에있는 스위치와 같은 CASE를 사용?
select case when totalCount >= 0 and totalCount < 11 then '0-10' when tatalCount > 10 and totalCount < 101 then '10-100' else '>100' end as newColumn from ( SELECT [Some Column], COUNT(*) TotalCount FROM INCIDENTS WHERE [Some Column] = 'Target Data' GROUP BY [Some Column] ) A
-
==============================
5.간단하게 다음을 사용 :
간단하게 다음을 사용 :
IF((SELECT count(*) FROM table)=0) BEGIN .... END
-
==============================
6.하나 확실한 해결책은, 계수 = 1을하고 삽입을 실행하는 모든 항목을 선택 첫째,이 별도의 쿼리를 실행할 수> 1 항목을 선택하고 두 번째 삽입을 실행하는 것입니다.
하나 확실한 해결책은, 계수 = 1을하고 삽입을 실행하는 모든 항목을 선택 첫째,이 별도의 쿼리를 실행할 수> 1 항목을 선택하고 두 번째 삽입을 실행하는 것입니다.
두 번째 단계로 두 개의 인서트는 아마 당신은 하나 개의 쿼리로 결합 할 수 있습니다 비슷합니다.
또 다른 가능성은 레코드를 통해 루프에 커서를 사용하고 각 라인에 필요한 어떤 로직을 수행하는 것입니다.
-
==============================
7.이이 코드를 많은 여러 가지가 있지만 여기에 하나의 가능한 방법입니다. 나는 MS SQL 있으리라 믿고있어
이이 코드를 많은 여러 가지가 있지만 여기에 하나의 가능한 방법입니다. 나는 MS SQL 있으리라 믿고있어
우리는 행 수 (또 다른 빠른 예)를 얻어서 시작한 다음 경우 / 다른 할거야
-- Let's get our row count and assign it to a var that will be used -- in our if stmt DECLARE @HasExistingRows int -- I'm assuming it can fit into an int SELECT @HasExistingRows = Count(*) ELSE 0 -- false FROM INCIDENTS WHERE {Your Criteria} GROUP BY {Required Grouping}
이제 우리는 만일 / 그렇지 논리 MSDN 문서 작업을 수행 할 수 있습니다
-- IF / Else / Begin / END Syntax IF @HasExistingRows = 0 -- No Existing Rows BEGIN {Insert Logic for No Existing Rows} END ELSE -- existing rows are found BEGIN {Insert logic for existing rows} END
(마흐무드 가말의 의견에 의해 영감을) 또 다른 빠른 방법 :
"EXISTS"찾아 - - MSDN 문서 2 전체 변수 생성 / 할당을 잊어 버려.
IF EXISTS ({SELECT Query}) BEGIN {INSERT Version 1} END ELSE BEGIN {INSERT version 2} END
-
==============================
8.이 SQL 서버에있는 경우, 귀하의 구문이 올바른지; 그러나, 당신은 당신의 중첩 된 쿼리의 총 개수로 COUNT (*)를 참조 할 필요가있다. 이것은 당신이 필요로하는 무엇을 제공해야합니다 :
이 SQL 서버에있는 경우, 귀하의 구문이 올바른지; 그러나, 당신은 당신의 중첩 된 쿼리의 총 개수로 COUNT (*)를 참조 할 필요가있다. 이것은 당신이 필요로하는 무엇을 제공해야합니다 :
SELECT CASE WHEN TotalCount >0 THEN 'TRUE' ELSE 'FALSE' END FROM ( SELECT [Some Column], COUNT(*) TotalCount FROM INCIDENTS WHERE [Some Column] = 'Target Data' GROUP BY [Some Column] ) DerivedTable
이 사용하면 변수에 TOTALCOUNT를 할당하고 ELSE 문이 INSERT 문을 실행하는 경우 다음을 사용할 수 있습니다 :
DECLARE @TotalCount int SELECT @TotalCount = TotalCount FROM ( SELECT [Some Column], COUNT(*) TotalCount FROM INCIDENTS WHERE [Some Column] = 'Target Data' GROUP BY [Some Column] ) DerivedTable IF @TotalCount > 0 -- INSERT STATEMENT 1 GOES HERE ELSE -- INSERT STATEMENT 2 GOES HERE
from https://stackoverflow.com/questions/14072140/using-if-else-statement-based-on-count-to-execute-different-insert-statements by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 오라클의 날짜로 문자열을 날짜로 변환 (0) | 2020.05.24 |
---|---|
[SQL] SQL Server의 어떤 사용자가 만든 개체를 결정 (0) | 2020.05.24 |
[SQL] 엑셀 VBA : MySQL의 데이터베이스에 쓰기 (0) | 2020.05.24 |
[SQL] 내 SQL 동적 실행하고 저장 프로 시저에서 변수에 출력을 얻을 쿼리 (0) | 2020.05.23 |
[SQL] MySQL의 날짜 필드 만 월과 일 비교 (0) | 2020.05.23 |