2014-09-08 5 views
0
if (SELECT * FROM SDOPTTABLE WHERE OPTTABLENO = '324' AND OPTTABLEVAL = '00883578') = null 
    insert into SDOPTTABLE(comp_cd, opttableno, opttableval, optname, dt_stamp) 
    values ('1','324','00883578','STOCKROOM ATTENDANT',getdate()) 

SELECT * FROM SDOPTTABLE WHERE OPTTABLENO = '324' AND OPTTABLEVAL = '00883578' 
else 
    (SELECT * FROM SDOPTTABLE WHERE OPTTABLENO = '324' AND OPTTABLEVAL = '00883578') 

Я хочу снова «выбрать» из таблицы «SDOPTTABLE» после проверки и уже вставленного ввода данных, которого не было.SQL Server: как выполнить сразу два действия?

Может ли кто-нибудь показать мне правильный метод для этого? Благодарю.


код я

INSERT INTO HCSERVREC (COMP_CD, JOBTL_CD, JOBGD_CD) 
select    '1', (if NOT EXISTS(
    SELECT 1 
    FROM SDOPTTABLE 
    WHERE OPTTABLENO = '324' 
     AND OPTTABLEVAL = '00883578' 
    ) 
BEGIN 
INSERT INTO SDOPTTABLE (
    comp_cd 
    ,opttableno 
    ,opttableval 
    ,optname 
    ,dt_stamp 
    ) 
VALUES (
    '1' 
    ,'324' 
    ,'00883578' 
    ,'STOCKROOM ATTENDANT' 
    ,getdate() 
    ) 
END 

SELECT * 
FROM SDOPTTABLE 
WHERE OPTTABLENO = '324' 
AND OPTTABLEVAL = '00883578'), '[$9]' 

вы можете указать мне место неправильно?

+0

Две вещи: ** (1) ** не использовать '= NULL' для проверки нуль - используйте' IS NULL' (или 'IS NOT NULL') вместо этого! И ** (2) **, если вы хотите выполнить более одного оператора в ветке 'IF', вам нужно поместить свои операторы в блок' BEGIN ..... END' –

+0

IF EXISTS() - приятный один здесь ... Я должен признать, что, когда дело доходит до ввода процедурного (if/else) кода в SQL, я обычно начинаю думать, что я делаю что-то не так и возвращаться, чтобы узнать, что это такое – Liath

ответ

2

Попробуйте это

IF NOT EXISTS (
     SELECT 1 
     FROM SDOPTTABLE 
     WHERE OPTTABLENO = '324' 
      AND OPTTABLEVAL = '00883578' 
     ) 
BEGIN 
    INSERT INTO SDOPTTABLE (
     comp_cd 
     ,opttableno 
     ,opttableval 
     ,optname 
     ,dt_stamp 
     ) 
    VALUES (
     '1' 
     ,'324' 
     ,'00883578' 
     ,'STOCKROOM ATTENDANT' 
     ,getdate() 
     ) 
END 

SELECT * 
FROM SDOPTTABLE 
WHERE OPTTABLENO = '324' 
    AND OPTTABLEVAL = '00883578' 
+0

Привет, братик. Спасибо за быстрый и правильный ответ! это работает! но есть кое-что, чего я не понимаю, надеюсь, что смогу получить от вас какое-то объяснение. что «выбрать 1» и «выбрать« Top 1 »? – Jelly

+0

@Jelly: нет никакой разницы в выражении существования, если вы пишете «Выбрать 1» или «Выбрать верхнюю 1» bcs после того, как какая-либо запись будет найдена, тогда она удовлетворит ваше условие if и вставляет запись –

+0

. Я встречаю другую проблему, когда я был переводя это заявление в другой оператор «Вставить», станет одним из входных значений VALUES, это станет ошибкой, которая произошла в «IF». – Jelly

Смежные вопросы