Discussion:
Uebergabe von NULL als Parameter fuer gespeicherte pozeduren im MS-SQL-Server
(zu alt für eine Antwort)
Irmgard Schwenteck
2010-05-28 16:59:11 UTC
Permalink
Hallo,

ist das jetzt hier ein bug oder ein feature:

Auf dem SQL-Server gibt es eine gespeicherte Prozedur, die verarbeitet
die übergebenen Argumente zu einer Pivotabfrage. Der Fall, daß für
bestimmte Argumente NULL übergeben wird, wird darin extra behandelt.


Über eine Webseite kann der Nutzer sich jetzt Zeiträume und ausgegebene
Spalten zusammenklickern, daraus generiert PHP dann den Prozeduraufruf
mit den entsprechenden Argumenten.

Ist eines der Argumente NULL, schlägt der Aufruf über PHP fehl, weil in
der Prozedur die funktion ifnull(..) nicht greift, weil das übergebene
Argument offenbar was anderes als NULL ist und der Rest dann nicht mehr
paßt. Wird der ausgegebene SQL-String direkt im management-Studio
ausgeführt, funktioniert es.

So zum Beispiel:
$sql = "EXECUTE GeneratePivotQuery 'vUmsatz', 'sum', 'Umsatz', 'cTag',
NULL, 'Gesamt', 'Jahr=2010 AND Monat=1'";

$rs = mssql_query($sql, $db);

Anstelle von NULL könnte auch eine Filterbedingung stehen.

Ich habs jetzt so gelöst, daß PHP dann anstelle "NULL"
den Filter " '1=1' " übergibt, das geht soweit.

Übergibt da PHP die NULLwerte nicht richtig?
PHP Version 5.2.6, SQL 2005 express

Gruß
Irmgard
Richard Ohl
2010-05-29 16:25:35 UTC
Permalink
Post by Irmgard Schwenteck
Übergibt da PHP die NULLwerte nicht richtig?
PHP Version 5.2.6, SQL 2005 express
Hi,
ich weiß nicht, wie du mittels PHP zugreifst. mssql_bind erwartet für NULL
den Parameter isnull = true.
Hilft dir das?
VG Richard
--
Don't take life too seriously. You'll never get out alive. -- Bugs Bunny
Irmgard Schwenteck
2010-05-29 18:11:44 UTC
Permalink
Hallo
Post by Richard Ohl
Post by Irmgard Schwenteck
Übergibt da PHP die NULLwerte nicht richtig?
PHP Version 5.2.6, SQL 2005 express
Hi,
ich weiß nicht, wie du mittels PHP zugreifst. mssql_bind erwartet für NULL
den Parameter isnull = true.
Hilft dir das?
Den Aufwand, das ganze Zusammenstellen der Benutzeranforderungen über mssql_
execute und mssql_bind zu realisieren, finde ich wesentlich höher, als
_einen_ sql-string zusammenzubasteln:

Die prozedur GeneratePivotQuery erzeugt eine select-abfrage und gibt das
Ergebnis aus.

$sql = "EXECUTE GeneratePivotQuery 'vUmsatz', 'sum', 'Umsatz', 'cTag',
NULL, 'Gesamt', 'Jahr=2010 AND Monat=1'";

$rs = mssql_query($sql, $db);

Da es keine Aktionsabfrage sondern eine Auswahlabfrage ist, geht es ja
prinzipiell auch über mssql_query. Bis auf den Umstand, daß NULL-werte
offenbar nicht richtig übergeben werden. Darüber ist aber in der
Funktionsbeschreibung nichts zu finden, deshalb frage ich hier.

Gruß
Irmgard

Lesen Sie weiter auf narkive:
Loading...