Jak zrobić INSERT w poleceniu IF lub CASE ?

Odpowiedz Nowy wątek
2018-07-11 19:02
0

Witam,

Potrzebuję stworzyć polecenie sql które po wywołaniu sprawdzi czy w kolumnie NAME znajduje się wartość np. "1" i jeżeli tak to wykona INSERT do tabeli jeżeli nie to nic nie zrobi. Kombinowałem na różne sposoby, IF, CASE ale bezskutecznie:

SELECT
      CASE
        WHEN NAME = 1 THEN (INSERT [dbo].[ACC_PRO] ([NAME]) VALUES (10004))
      END
  FROM dbo.ACC_PRO
IF dbo.ACC_PRO.NAME=1) THEN (INSERT [dbo].[ACC_PRO] ([NAME]) VALUES (10004))
END IF
edytowany 3x, ostatnio: Kamil1987, 2018-07-11 19:03

Pozostało 580 znaków

2018-07-11 19:23
Chory Polityk
1

Nie wiem jaki dokładnie masz przypadek, ale patrząc na twój kod można zrobić coś takiego.

WITH Results AS
(
    SELECT
        [NAME]
    FROM
        [dbo].[ACC_PRO]
    WHERE
        [NAME] = 1
)
 
INSERT INTO
    [dbo].[ACC_PRO]
    (
      [NAME]
    )
SELECT 
    10004
FROM
    Results;

Pozostało 580 znaków

2018-07-11 20:45
0

Tu chyba zrobiłeś tak aby wartości do INSERTA były pobierane z SELECT'a ale nie o to chodzi, wartość ma być stała jeżeli MNEMO = 1 to wysyłam INSERTA o danej treści (jak poniżej), jeżeli nie wartość jest inna to nie wykonuję inserta.

Kod rzeczywisty (jeżeli w insercie mam już wartości to ostatnie dwie linie są zbędne/wyrzucają błąd):

WITH Results AS
(
    SELECT [HADEAP_MEMO]
    FROM dbo.T_HADEAP_ACCESS_POINTS
    WHERE [HADEAP_MEMO] = 1
)
 
INSERT [dbo].[T_HAPRQXL_COMMANDS_QUEUE_XML] ([HAPRQXL_ID_HADED_DEVICE], [HAPRQXL_CONTENTS], [HAPRQXL_PRIORITY]) VALUES (10004, N'<?xml version="1.0" ?>
<ROOT>
  <PROCEDURE_NUMBER DESC="Ustawia przejscie kontrolowane w okreslonym stanie.">30</PROCEDURE_NUMBER>
  <PROCEDURE_FIELD COUNT="2">
    <FIELD ID="1" TYPE="1" TYPE_DESC="UNSIGNED">32</FIELD>
    <FIELD ID="2" TYPE="1" TYPE_DESC="UNSIGNED">3</FIELD>
  </PROCEDURE_FIELD>
</ROOT>
', 10)
 
SELECT 10004
FROM Results;

Tabela: dbo.T_HADEAP_ACCESS_POINTS
screenshot-20180711205707.png

edytowany 5x, ostatnio: Kamil1987, 2018-07-11 21:00

Pozostało 580 znaków

2018-07-11 21:44
0

zrób procedurę po stronie bazy. Żadna ze znanych mi baz nie obsługuje takiej konstrukcji


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.

Pozostało 580 znaków

2018-07-11 22:52
0

A musisz mieć INSERT ... VALUES, zamiast INSERT ... SELECT ...?

Pozostało 580 znaków

2018-07-11 22:57
Xyz123
0

Obczaj sobie takie sprytne polecenie jak MERGE , chyba o to Ci chodzi

Pozostało 580 znaków

2018-07-12 08:46
0

Można tak:

insert into XYZ 
    select value1,value2,value3 where exists (select 1 FROM dbo.T_HADEAP_ACCESS_POINTS WHERE [HADEAP_MEMO] = 1)

Wstawiasz określone wartości do tabeli XYZ o ile w innej tabelce istnieje jakiś rekord spełniający kryteria

--- edited:
zakładam, że to SQL Server

edytowany 1x, ostatnio: yarel, 2018-07-12 08:46

Pozostało 580 znaków

2018-07-12 08:57
0
 
IF EXISTS (SELECT 1 FROM dbo.T_HADEAP_ACCESS_POINTS WHERE [HADEAP_MEMO] = 1) 
INSERT [dbo].[T_HAPRQXL_COMMANDS_QUEUE_XML] ([HAPRQXL_ID_HADED_DEVICE], [HAPRQXL_CONTENTS], [HAPRQXL_PRIORITY]) VALUES (10004, N'<?xml version="1.0" ?>
<ROOT>
  <PROCEDURE_NUMBER DESC="Ustawia przejscie kontrolowane w okreslonym stanie.">30</PROCEDURE_NUMBER>
  <PROCEDURE_FIELD COUNT="2">
    <FIELD ID="1" TYPE="1" TYPE_DESC="UNSIGNED">32</FIELD>
    <FIELD ID="2" TYPE="1" TYPE_DESC="UNSIGNED">3</FIELD>
  </PROCEDURE_FIELD>
</ROOT>
', 10)

pozdrawiam
paweld

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0