none
SQL Express Server, der mehrteilige Bezeichner .... konnte nicht gebunden werden. RRS feed

  • Frage

  • Hallo Community,

    ich verwende SQLServer Express 2014 english und Windows 10 bei einer Abfrage in SQLServer komme ich an einer Stelle einfach nicht weiter. Meine Abfrage:

    SELECT dbo.[Closing (2)].Batch_ID, (CASE WHEN LAG_Time_Diff <= 0.5 AND LAG_Time_Diff > 0 AND ISNULL(Film_Speed, 0) > 0.5 THEN LAG_Time_Diff * 60 * Belt_Speed * 1.1 * (ISNULL(dbo.tblPSM_Raw_Materials.Tex, 0) * ISNULL(dbo.tblPSM_Raw_Materials.Viscosity, 0))

    / 1000000 ELSE 0 END) / 60 AS Expr4, (CASE WHEN LAG_Time_Diff <= 0.5 AND LAG_Time_Diff > 0 AND ISNULL(Film_Speed, 0) > 0.5 THEN LAG_Time_Diff * 60 * Belt_Speed * 1.1 * (ISNULL(dbo.tblPSM_Raw_Materials_5.Tex, 0) * ISNULL(dbo.tblPSM_Raw_Materials.Viscosity, 0))

    / 1000000 ELSE 0 END) / 60 AS Lower_Film_Consumption_Kg, dbo.[Closing (2)].Scrap_Kg, tblPSM_Raw_Materials_5.Viscosity, tblPSM_Raw_Materials_5.Tex, dbo.tblPSM_Raw_Materials.Viscosity AS Expr1, dbo.tblPSM_Raw_Materials.Tex AS Expr2,

    dbo.Master_Data_Source.Lower_Film_ID_Target, dbo.Master_Data_Source.Upper_Film_ID_Target, tblPSM_Raw_Materials_5.Raw_ID, dbo.tblPSM_Raw_Materials.Raw_ID AS Expr3

    FROM dbo.tblPSM_Raw_Materials AS tblPSM_Raw_Materials_5 RIGHT OUTER JOIN

    dbo.Master_Data_Source ON tblPSM_Raw_Materials_5.Raw_ID = dbo.Master_Data_Source.Lower_Film_ID_Target LEFT OUTER JOIN

    dbo.tblPSM_Raw_Materials ON dbo.Master_Data_Source.Upper_Film_ID_Target = dbo.tblPSM_Raw_Materials.Raw_ID RIGHT OUTER JOIN

    dbo.[Closing (2)] ON dbo.Master_Data_Source.Finished_Product = dbo.[Closing (2)].Finished_Product FULL OUTER JOIN

    dbo.[Process_Data (2)] FULL OUTER JOIN

    dbo.View_SMC_Process_TimeDiff ON dbo.[Process_Data (2)].ID_Archive = dbo.View_SMC_Process_TimeDiff.ID_Archive ON dbo.[Closing (2)].Batch_ID = dbo.[Process_Data (2)].Batch_ID

    WHERE (dbo.[Closing (2)].Batch_ID = N'22081202')

    Das Problem ist die Stelle 'dbo.tblPSM_Raw_Materials_5.Tex' hier kommt die Meldung "der mehrteilige Bezeichner dbo.tblPSM_Raw_Materials_5.Tex konnte nicht gebunden werden. Der Tabellename ist korrekt, der Spaltenname auch dbo.tblPSM_Raw_Materials_5.Tex und dbo.tblPSM_Raw_Materials.Tex sind dieselbe Tabelle, wenn ich dbo.tblPSM_Raw_Materials_5.Tex durch dbo.tblPSM_Raw_Materials.Tex ersetzen dann funktioniert das einwandfrei, sobald ich dbo.tblPSM_Raw_Materials_5.Tex ins Spiel bringe dann kommt die Meldung.

    Was kann ich tun?


    Grus und Dank

    Peter

    Sonntag, 11. September 2022 18:53

Antworten

  • Hallo Peter,

    ich hab mich mal durch den (leider recht unleserlichen) Code gewühlt.

    tblPSM_Raw_Materials_5 ist in deinem Fall ja ein Aliasname (dbo.<Tabelle> AS <Alias>). Daher musst Du den Schemanamen, in deinem Fall also dbo. vor dem Aliasnamen weglassen. Schreib also:

    tblPSM_Raw_Materials_5.Tex

    anstelle von:

    dbo.tblPSM_Raw_Materials_5.Tex

    HTH


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport


    Sonntag, 11. September 2022 21:25
    Moderator

Alle Antworten

  • Hallo Peter,

    bitte formatier deinen SQL Code so, dass er lesbar ist und nutze zum Einfügen den Code Button im Editor hier (zweites Icon von rechts).

    Dann kann man dir sicher auch helfen.

    Danke im Voraus.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Sonntag, 11. September 2022 20:39
    Moderator
  • Hallo Peter,

    ich hab mich mal durch den (leider recht unleserlichen) Code gewühlt.

    tblPSM_Raw_Materials_5 ist in deinem Fall ja ein Aliasname (dbo.<Tabelle> AS <Alias>). Daher musst Du den Schemanamen, in deinem Fall also dbo. vor dem Aliasnamen weglassen. Schreib also:

    tblPSM_Raw_Materials_5.Tex

    anstelle von:

    dbo.tblPSM_Raw_Materials_5.Tex

    HTH


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport


    Sonntag, 11. September 2022 21:25
    Moderator
  • Man könnte auch noch darüber nachdenken, den Alias-Namen etwas kürzer zu machen, damit das Statement überschaubarer wird!

    dbo.tblPSM_Raw_Materials_5 as PRM_5

    ... oder so ähnlich! ;-)


    Einen schönen Tag noch, Christoph - http://www.insidesql.org/blogs/cmu

    Montag, 12. September 2022 07:39
  • Überprüfe die genaue Schreibweise der Namen in deiner Tabelle.
    Ggf. setze eckige Klammern.

    dbo.[TableName].[FieldName]

    Montag, 12. September 2022 12:50
  • Hallo Stefan,

    vielen Dank für deine Antwort, das funktioniert super.

    Guter Tipp von Christoph. Das mit dem kurzen Alias ist ein guter Tipp, ich habe noch längere Statements, da wird das schon sehr unübersichtlich.

    Wahrscheinlich gibt es keine logische, verständliche Antwort auf die Fragen:

    Warum gibt es bei .....Materials_5.Tex mit dbo. Schemanamen Probleme aber nicht bei Materials_1.Tex, Materials_2.Tex, Materials_3.Tex und .... Marerials_4.Tex? das ist wohl ein MS Rätsel.

    Die Abfragen wurden mittels MSSQLMS erzeugt, wenn dbo. beim Aliasnamen nicht sinnvoll ist, dann könnte MSSQLMS das freundlicherweise auch weglassen.

    Aber ich muss ja nicht Alles verstehen, wenn es funktioniert dann bin ich schon zufrieden.

    Danke für die Hilfe.

    Gruss Peter

     

    Montag, 12. September 2022 16:11
  • Hallo Peter,

    Warum gibt es bei .....Materials_5.Tex mit dbo. Schemanamen Probleme aber nicht bei Materials_1.Tex, Materials_2.Tex, Materials_3.Tex und .... Marerials_4.Tex? das ist wohl ein MS Rätsel.

    wahrscheinlich wird der Abfragegenerator bei den anderen Aliasnamen den Schemanamen dbo. nicht voranstellen. Warum das dann in dem einen Fall passiert, kann ich so nicht sagen, dafür müsste man das auf deinem System analysieren.

    Eine Möglichkeit wäre wohlm dass irgendjemand irgendwann mal manuell das dbo. reingeschrieben hat und es seither immer mitgeführt wird.

    So oder so: Bei Aliasnamen darf der Schemaname nicht vorangestellt werden.

    Kleiner Tipp: Es gibt eigentlich keinen guten Grund, den Abfragegenerator zu verwenden. Die SQL Statements sind unleserlich, meist nicht optimiert, vieles lässt sich mit dem Generator überhaupt nicht umsetzen und bei Fehlern wird es schwer, überhaupt erkennen zu können, was genau da wo gemacht wird.

    Schreib die Abfragen besser von Hand in einem Codefenster. Es gibt da auch Tools, die dich beim Schreiben unterstützen, bspw. Red Gate SQL Prompt und ähnliches.



    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport


    Montag, 12. September 2022 20:34
    Moderator