Jak zrobić INSERT w poleceniu IF lub CASE ?

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
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;
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

0

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

0

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

0

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

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

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)

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