Использование инструкции IF ELSE на основе Count для выполнения различных операторов Insert
Пока я просматриваю свою базу данных, я запускаю инструкцию INSERT, если обнаруживаю, что определенного элемента не существует, и я запускаю другой оператор INSERT, если я нахожу один или несколько из этого элемента.
Я не совсем уверен, как использовать выражения IF ELSE.
То, что я до сих пор представляет собой оператор, который будет подсчитывать количество раз, когда появляются целевые данные; он будет печатать TRUE, если он больше 0, если нет, он будет печатать FALSE. Я не могу найти никаких примеров, чтобы помочь мне понять, как я могу использовать это для запуска двух разных инструкций 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
Пока вам нужно найти его на основе Count всего более 0, лучше использовать EXISTS следующим образом:
IF EXISTS (SELECT 1 FROM INCIDENTS WHERE [Some Column] = 'Target Data')
BEGIN
-- TRUE Procedure
END
ELSE BEGIN
-- FALSE Procedure
END
Ответ 3
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
одно очевидное решение состоит в том, чтобы запустить 2 отдельных запроса, сначала выберите все элементы, которые имеют count = 1, и запустите вашу вставку, затем выберите элементы со счетом > 1 и запустите вторую вставку.
как второй шаг, если две вставки подобны, вы, вероятно, можете объединить их в один запрос.
Другая возможность - использовать курсор для петли через ваш набор записей и выполнять любую логику, необходимую для каждой строки.
Ответ 5
Не совсем понятно, что вы подразумеваете под
"I cant find any examples to help me understand how I can use this to
run 2 different statements:"
. Используется ли CASE
как a SWITCH
после?
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
Ответ 6
Если это в SQL Server, ваш синтаксис правильный; однако вам нужно указать 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 переменной, а затем использовать оператор IF 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
Ответ 7
Существует много способов кодирования, но вот один из возможных способов. Я предполагаю MS SQL
Мы начнем с подсчета строк (Другой Быстрый пример), а затем сделайте, если /else
-- Let 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}
Теперь мы можем сделать If/Else Logic Документы 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.
IF EXISTS ({SELECT Query})
BEGIN
{INSERT Version 1}
END
ELSE
BEGIN
{INSERT version 2}
END