Announcement

Collapse
No announcement yet.

Stored Procedure Conversion Fehler

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Stored Procedure Conversion Fehler

    Hallo ihr Datenbankler,
    ich habe einen Fehler bei dem mir auch leider Google bisher nicht wirklich helfen konnte.
    Meine Stored Prdocedure sieht momentan so aus:

    [highlight=sql]
    ALTER PROCEDURE [dbo].[spSearchLabelAndSN]
    @label varchar(15) = '',
    @serial varchar(10) = ''
    AS
    BEGIN
    SET NOCOUNT ON;

    Declare @command varchar(500)
    Set @command =
    'SELECT Kunden.Name as ''Kunde name'',Autos.Serial AS ''Auto serial'',Autos.Label AS ''Auto label'''+
    'FROM Kunden FULL OUTER JOIN ' +
    'Autos ON Kunden.ID = Autos.KundenID ' +
    'WHERE (1 = 1) '

    if(@label <> '')
    Begin
    Set @command = @command +' AND (Autos.Label LIKE ''%'+@label+'%'') '
    End
    if( @serial <> '')
    Begin
    Set @command = @command +' AND (Autos.InternalID LIKE ''%'+@serial+'%'') '
    End

    Set @command = @command +'ORDER BY ''Auto serial'', ''Auto label'', ''Kunde name'' '
    Exec(@command);
    Return @command;
    [/highlight]

    Anzumerken ist, dass das Label ind er Datenbank auch ein varchar() ist aber Serial in der Datenbank ein int, bei der Abfrage ein varchar().

    Daher kommt auch beim Ausführen der Stored Procedure ein Fehler, der darauf hinweist:
    Conversion failed when converting the varchar value [...] to data type int.

    Ich weiß nur leider nicht, wie ich den Fehler beheben kann. (Vielleicht steh ich auch einfach nur aufm Schlauch! )

    Danke
    Gruß Zimbel

  • #2
    Mußte halt den INT in einen VARCHAR casten, wenn Du unbedingt den INTEGER mit LIKE vergleichen willst...

    Comment


    • #3
      ohne dynamic SQL müßte es auch gehen:[HIGHLIGHT="SQL"]SELECT Kunden.Name as "Kunde name"
      , Autos.Serial AS "Auto serial"
      , Autos.Label AS "Auto label"
      FROM DBO.Kunden
      JOIN DBO.Autos ON Kunden.ID = Autos.KundenID
      WHERE ( NULLIF (@Label, SPACE(0))
      OR Autos.Label LIKE '%'+ @label + '%'
      AND ( NULLIF (@Serial , SPACE(0))
      OR CAST (Autos.InternalID) AS VarChar) LIKE '%'+ @Serial + '%'
      )
      ORDER BY Autos.Serial, Autos.Label, Autos.Label [/HIGHLIGHT]

      und wenn man dann obiges in eine SP packt, dann sollte man bei den Tabellen-namen beim SQL-Server auch die Schema angeben
      (hier mal angenommen, die Tabellen liegen im Schema DBO)

      Comment

      Working...
      X