Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> przekazywanie wartości NULL do dynamicznego SQL, MS SQL
rydlik
post 18.01.2014, 16:16:44
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 9.10.2011

Ostrzeżenie: (0%)
-----


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

  1. SET QUOTED_IDENTIFIER OFF
  2. DECLARE @Radius FLOAT
  3. DECLARE @Diameter INTEGER
  4.  
  5. SET @Radius = 12.5
  6. SET @Diameter = NULL
  7.  
  8. EXEC("
  9. -- w tym wypadku wartość @Diameter jest polem pustym
  10. SELECT '"+@Radius+"' , '"+@Diameter +"'
  11. ")
  12.  
  13. -- poniższe polecenie zwraca poprawnie ponieważ nie jest w EXEC, i zwraca za parametr @Diameter wartość NULL
  14. SELECT @Radius ,@Diameter



bardzo proszę o pomoc

Ten post edytował rydlik 18.01.2014, 16:18:08
Go to the top of the page
+Quote Post
juris
post 12.03.2014, 09:47:21
Post #2





Grupa: Zarejestrowani
Postów: 8
Pomógł: 1
Dołączył: 12.03.2014

Ostrzeżenie: (0%)
-----


Polecałbym (jeśli już musisz stosować dynamiczny SQL) wykonywanie go za pomocą procedury sp_executesql. Dodatkowo, warto jawnie zapewnić konwersję na typ znakowy.

  1. SET QUOTED_IDENTIFIER OFF
  2. DECLARE @Radius FLOAT
  3. DECLARE @Diameter INTEGER
  4.  
  5. DECLARE @tempSQL nvarchar(1000)
  6.  
  7. SET @Radius = 12.5
  8. SET @Diameter = NULL
  9.  
  10. SET @tempSQL= 'SELECT ' + ISNULL( cast(@Radius AS varchar) ,'NULL') + ' , ' + ISNULL( cast(@Diameter AS varchar) ,'NULL') ;
  11.  
  12. exec (@tempSQL)
  13. exec sp_executesql @tempSQL


Ten post edytował juris 12.03.2014, 09:48:20
Go to the top of the page
+Quote Post
rydlik
post 24.09.2014, 14:19:05
Post #3





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 9.10.2011

Ostrzeżenie: (0%)
-----


jeśli by to kogoś jeszcze interesowało, zgodzę się z moim przedmówcą. należy użyc funkcji sp_executesql ale w ten sposób:

  1. SET QUOTED_IDENTIFIER OFF
  2.  
  3. DECLARE @Radius FLOAT
  4. DECLARE @Diameter INTEGER
  5.  
  6. SET @Radius = 12.5
  7. SET @Diameter = NULL
  8.  
  9.  
  10. -- złe rozwiązanie
  11. EXEC("
  12. -- w tym wypadku wartość pola jest pusta
  13. SELECT '"+@Radius+"' , '"+@Diameter +"'
  14. ")
  15.  
  16. -- poprawne ROZWIĄZANIE
  17. DECLARE @SQL NVARCHAR(max)
  18. SET @SQL = 'SELECT @Radius_ds, @Diameter_ds'
  19. EXEC sp_executesql @SQL,
  20. N'@Diameter_ds integer, @Radius_ds float',
  21. @Radius_ds = @Radius, @Diameter_ds = @Diameter
  22.  
  23.  
  24. -- poniższe polecenie zwraca poprawnie ponieważ nie jest w EXEC, i zwraca za parametr @Diameter wartość NULL
  25. SELECT @Radius ,@Diameter



pozdrawiam
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.05.2019 - 08:21