Подтвердить что ты не робот

Использование инструкции 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]
)
4b9b3361

Ответ 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