przekazywanie wartości NULL do dynamicznego SQL

0

Witajcie, mam pytanie, jak przekazać wartość nul aby została ona poprawnie wyświetlona w EXEC - dynamicznym sqlu. Mój przykład:

DECLARE @temp INTEGER = NULL;
set quoted_identifier off
EXEC("

	SELECT '"+@temp+"'
	SELECT NULL   -- poprawny przykład

")


 
1

spróbuj tak:

DECLARE @Radius      FLOAT
DECLARE @Diameter    INTEGER

SET @Radius = 12.5
SET @Diameter = null

SELECT @Radius  , @Diameter 
0

wiesz, to też nie o to chodzi. Zależy mi na tym aby przekazać zmienną u stawioną na NULL do EXEC i aby w nim wykonana instrukcja selekt pokazała null'a tak jakby to było poza EXEC. Modyfikując Twój kod:

SET QUOTED_IDENTIFIER OFF
DECLARE @Radius      FLOAT
DECLARE @Diameter    INTEGER
 
SET @Radius = 12.5
SET @Diameter = NULL

exec(" 
SELECT '"+@Radius+"'  , '"+@Diameter +"'
")

-- poniższe polecenie zwraca poprawnie 
SELECT @Radius ,@Diameter 
0
SET QUOTED_IDENTIFIER OFF
DECLARE @Radius      FLOAT
DECLARE @Diameter    INTEGER
 
SET @Radius = 12.5
SET @Diameter = NULL
 
EXEC(" 
SELECT "+ Coalesce("'" + @Radius + "'", "NULL")+"  , '"+@Diameter +"'
")
 

itd.

0

nie o to chodzi, może inaczej mam taki kod:

 
SET QUOTED_IDENTIFIER OFF

DECLARE @Diameter    INTEGER = null


-- gdy chce wypisać zmienną @Diameter, w ten sposób (bez EXEC) wyświetla się pole NULL i tak ma być
SELECT @Diameter


-- natomiast jak to samo umieszczę w EXEC już zwraca puste pole. 
EXEC(" SELECT '"+@Diameter+"' ")

i pytanie czy ktoś wie dlaczego i jak to zrobić aby w EXEC NULL był przekazywany w zmiennej poprawnie?

0

wynik jako null przechodzi dla MS SQL

SET QUOTED_IDENTIFIER OFF
DECLARE @Radius      FLOAT
DECLARE @Diameter    INTEGER
 
SET @Radius = 12.5
SET @Diameter = NULL
 
EXEC("SELECT '"+@Radius+"'as [pierwsza kolumna]  , '"+@Diameter +"'as [druga kolumna a wywniku null]") 

a samego "NULL"a to się chyba nie da do stringa podstawić.

0

D się podstawić Null. Trzeba tam wpisać NULL, żeby było SELECT NULL, ... I to powyżej napisałem.

0

tak, da się. Ale ja chce przekazać pod zmienną, a nie wpisać po prostu SELECT NULL, tylko SELECT '"+@Diameter+"' i to nie działa

0

wynik przetworzenia Twojego zapytania na zdjęciu w załączniku. W nim widać, że jest to pole puste a nie pole NULL (na zdjęciu podświetlone na niebiesko)

0

A może tak od początku bo ta sztuka dla sztuki z NULL -em to pomyłka.
Po co ładować NULL -a do stringa skoro NULL jest zwracanym wynikiem.
Jak brak w tabeli wartości to masz NULL ale to jest wynik zwracany. Jak chcesz mieć w tabeli NULL to nic nie zapisujesz i masz NULL.

Jaki jest cel ???

0

cel jest przykładowo taki:

 
SET QUOTED_IDENTIFIER OFF
DECLARE @Radius      FLOAT
DECLARE @Diameter    INTEGER
 
SET @Radius = 12.5
SET @Diameter = NULL
 
-- nie wyświetla w polu wartości 100
EXEC("SELECT '"+@Radius+"' as [pierwsza kolumna]  , ISNULL('"+@Diameter +"',100)as [druga kolumna a wywniku null]") 

-- wyświetla poprawnie wartość 100, bo nie jest w execu
SELECT @Radius as [pierwsza kolumna]  , ISNULL(@Diameter,100)as [druga kolumna a wywniku null]

problem polega na tym, iż musi to być wykonane w execu. Macie jakiś pomysł?

0

Dwa dni temu napisałem ci poprawnie. Tylko zamiast ISNULL użyłem Coalesce... Masz w złym miejscu ISNULL - musi być poza stringiem, nie wewnątrz.

0

mam do Ciebie ogromną prośbę, mógłbyś według tego co mówisz przerobić kod:

 SET QUOTED_IDENTIFIER OFF
DECLARE @Radius      FLOAT
DECLARE @Diameter    INTEGER
 
SET @Radius = 12.5
SET @Diameter = NULL
 
-- nie wyświetla w polu wartości 100
EXEC("SELECT '"+@Radius+"' as [pierwsza kolumna]  , ISNULL('"+@Diameter +"',100)as [druga kolumna a wyniku null]") 
 
-- wyświetla poprawnie wartość 100, bo nie jest w execu
SELECT @Radius AS [pierwsza kolumna]  , ISNULL(@Diameter,100)AS [druga kolumna a wywniku NULL]

tak aby działał, bo mi zarówno Twój "wspomniany" kod nie działa jak i ten powyższy

0

SELECT @Radius AS [pierwsza kolumna] , case when (@Diameter is null or @diameter='') then 100 else 200 end AS [druga kolumna a wywniku NULL]

0
DECLARE @Radius      FLOAT
DECLARE @Diameter    INTEGER
DECLARE @SQLStm      VARCHAR(MAX)

SET @Radius = 12.5
SET @Diameter = NULL

SET @SQLStm = 'SELECT ''' + Cast(@Radius as varchar) + ''' as [pierwsza kolumna],  ' + Cast(Coalesce(@Diameter,100) as varchar) + ' as [druga kolumna a wyniku null]'
 
-- nie wyświetla w polu wartości 100
EXEC(@SQLStm) 
 

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