sebastian: MSSQL: Problem mit Zusammensetzen von SP

hallo zusammen
hab ein problem mit einem sql-statement, dass ich per stored procedure ausführen möchte auf nem MSSQL:

ALTER PROCEDURE sp_admin_activate

@nID  AS INTEGER,
@bActive AS INTEGER,
@strTable AS VARCHAR(64)

AS

DECLARE @strSQL AS NVARCHAR(4000)

SET @strSQL = ''
 SET @strSQL = @strSQL + 'UPDATE '
 SET @strSQL = @strSQL + @strTable + ' SET [active] = ' + @bActive + ' WHERE '
 SET @strSQL = @strSQL + @strTable
 SET @strSQL = @strSQL + '_ID = ' + @nID

EXEC sp_executesql @strSQL
GO

ich will also ein dynamisches sql-statement @strSQL erstellen, um so eine globale aktivierungs-funktion zu haben. die funktion aktiviert den entsprechenden datensatz auf live/nicht live.

problem:
wenn ich das statement ausführe zb per "exec sp_admin_activate 1, 0, 'events')" bekomme ich folgende fehlermeldung:

"Syntaxfehler beim Konvertieren des nvarchar-Wertes 'UPDATE events SET [active] = '' in eine Spalte vom Datentyp int."

was mache ich falsch? @strSQL ist doch nicht INT und ich sehe keine neuen zuweisungen...

vielen dank für hilfe :)
sebastian

  1. 你好 sebastian,

    problem:
    wenn ich das statement ausführe zb per "exec sp_admin_activate 1, 0,
    'events')" bekomme ich folgende fehlermeldung:

    "Syntaxfehler beim Konvertieren des nvarchar-Wertes 'UPDATE events SET
    [active] = '' in eine Spalte vom Datentyp int."

    was mache ich falsch? @strSQL ist doch nicht INT und ich sehe keine neuen
    zuweisungen...

    Nein, aber anscheinend ist [active] vom Typ int. Und int kann dann nicht ''
    enthalten – warum nimmst du da nicht 0?

    再见,
     克里斯蒂安

  2. Hallo,

    SET @strSQL = @strSQL + @strTable + ' SET [active] = ' + @bActive + ' WHERE '
    "Syntaxfehler beim Konvertieren des nvarchar-Wertes 'UPDATE events SET [active] = '' in eine Spalte vom Datentyp int."

    Für mich sieht es so aus, als ob es Probleme mein impliziten Umwandeln des Integers in einen String gab.
    Versuche eventuell, @bActive (und auch @nID) explizit umzuwandeln (via CAST oder CONVERT).

    Grüße
      Klaus