none
Sql Server 2008 R2 Enterprise 64 Bit:: Call Function mit Table als Parameter - Aufrufprobleme RRS feed

  • Frage

  • Hallo,

    ich bin dabei gescheitert, auf dem 64-Bit eine Funktion mit einem Table-Parameter in Betrieb zu nehmen, die ich zuvor auf einem 32-Bit-Server erfolgreich testen konnte.

    Beim Test-Aufruf der Funktion bekomme ich die Fehlermeldung:

    Meldung 137, Ebene 16, Status 1, Zeile 6
    Die @MyParamTbl-Skalarvariable muss deklariert werden.

    Ich habe daraufhin meine Funktion derart entrümpelt, das man ohne Datenbanktabellen testen kann.

    Gibt es auf dem 64-Bit SqlServer irgendwelche Einschränkungen? Mache ich ggf. einen Fehler, der sich nur 64bittig auswirkt?
    Ist es ein Bug? Wenn ja, wie kann ich den melden?

    Funktionsaufrufe ok unter Sql Server R2 X86 mit Version 10.0.1600.22 DE

    Funktionsaufrufe Fehler unter Sql Server R2 X64 Version 10.0.1617.0 DE

    Funktionsaufrufe Fehler unter Sql Server R2 X64 Version 1 10.0.1617.0 EN

    Funktionsaufrufe Fehler unter Sql Server R2 X64 Version 10.50.4000.0 DE  (SP2 eingespielt)

    VG

      Workaholic63

    -- Anlage:
    CREATE TYPE dbo.TxtNachschlagen AS TABLE(
        [text] varchar(255) NOT NULL,
        sort numeric (19, 0) NOT NULL,
        id_language_Code  numeric(19, 0) NOT NULL
    )
    GO

    CREATE FUNCTION  dbo.GetTextTranslated (@ParamTbl dbo.TxtNachschlagen READONLY)
    RETURNS @retTbl TABLE (Id_Language_Key numeric(18,0), sort numeric(18,0), de varchar(255), en varchar(255), fr varchar(255), es varchar(255), it varchar(255))
    AS BEGIN
            INSERT INTO @retTbl (Id_Language_Key, sort, de, en)    values (4, 1, 'd', 'e')
        RETURN
    END
    GO

    --> Aufruftest
    declare @MyParamTbl dbo.TxtNachschlagen
    insert into @MyParamTbl (text, sort, id_language_Code) values ('mm', 1, 1)


    select * from @MyParamTbl  --> Ok
    select * from GetTextTranslated ( @MyParamTbl  )

    Dienstag, 25. September 2012 13:49

Alle Antworten

  • Hallo,

    ich habe zwar keinen 2008R2, dafür aber 2008 und 2012 unter 64 Bit OS als 64 Bit SQL Server am laufen und auf beiden funktioniert es.

    Mich wundert die Fehlermeldung bzgl "Skalarvariable" und nicht "Tabellenvariable", so als würde die Variable nicht richtig erkannt. Ist der SQL Server evtl mit eine Case Sensitive Collation installliert und es gibt eine Abweichung in der Groß-/Kleinschreibung?


    Olaf Helper

    Blog Xing

    Dienstag, 25. September 2012 14:27
  • Hi,
    danke für die schnelle Reaktion.

    Die Collations der DBs sind:

    SqlServer X64 DE: Latin1_General_CI_AS
    SqlServer x86 DE: Latin1_General_CI_AS

    SqlServer X64 EN: SQL_Latin1_General_CP1_CI_AS

    D.h. eine DB auf dem X86-Server, auf der der Funktionsaufruf funktioniert, hat dieselbe Collation wie die DB auf dem X64-Server, auf dem es nicht funktioniert.

    Workaholic63

    Dienstag, 25. September 2012 16:21
  • Hallo Olaf,

    leider werde ich bei meinen Kunden keinen anderen Server installieren können. Allein das Einspielen eines Service-Packs ist ein bürokratischer Akt und dauert...

    Insofern kann ich höchstens auf die DB-Collation einwirken... Da es bei Dir auf einem SqlServer 2008 64Bit funktioniert:

    Welche Collation hast Du denn auf Deinem 64-Bit SqlServer eingestellt?

    -------

    Wg. Groß-/Kleinschrift in den Objekten: Der gesamte Test ist in meinem ersten Beitrag enthalten. Ich habe m.E. nirgends eine abweichende Schreibweise.

    VG
      Workaholic63

    Mittwoch, 26. September 2012 07:45
  • Hallo,

    die Fehlermeldung deutet darauf hin, dass Du dort einen neuen Stapel anfängst (GO),
    womit die Variable nicht mehr gültig wäre, und die Fehlermeldung "normal".
    Führst (bzw. hast Du) definitiv das gleiche Test-Skript auf den Servern ausgeführt??

    Eher unwahrscheinlich hier ist eine Abhängigkeit von x86 vs. x64,
    denn der SQL Server verwendet für den die gleiche Codebasis
    (und hier unter SQL 2008 R2 SP x86 läuft es ebenso).

    Auch der Zeichensatz dürfte keine Rolle spielen, das könnte nur eine Rolle spielen,
    wenn das Ziel-System Case-Sensitiv (CS_AS etc.) wäre.

    Gruß Elmar

    Mittwoch, 26. September 2012 08:17
  • Hallo Elmar,
    danke für die Infos insbesondere den Hinweis zur Code-Basis. Das macht es in der Tat noch seltsamer.
    Leider habe ich nur die 3 Systeme zur Verfügung, um zu testen - und da deutet derzeit vieles auf eine Abhängigkeit hin.

    In meinem Testscript waren anfänglich die Zeilen 1, 2, 4 vom Aufruftest.
    Die Zeile 3 habe ich dazugebracht, um zu sehen, ob ich den Variableninhalt zugreifen kann.
    Das Script wird in immer vollständig ausgeführt -> 1 Stapel

    Viele Grüße
    Workaholic63

    Mittwoch, 26. September 2012 10:38