Announcement

Collapse
No announcement yet.

Prozedur, Where Klausel mit nvarchar wert

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

  • Prozedur, Where Klausel mit nvarchar wert

    Hallo ich habe ein Problem mit einer Gespeicherten Prozedur.
    Es sind Zwei Prozeduren, die eine holt Werte aus einer Tabelle und ruft die andere Prozedru und übergibt die geholten Werte an diese als Parameter.
    In der zweiten prozedur liegt der Fehler ich übergebe den Paramater @sm_wert an die where klause und möchte so bestimmte datensätze rausfiltern, doch es kommt immer der Fehler Ungültiger Spaltenname.
    Das heisst er hält den Wert des Parameters @sm_wert für einen Spaltennamen und nicht wür einen Wert.
    Kann mir da wer weiter helfen? Ich habe lange im Internet gesucht, aber kann dazu nichts finden.

    Die Tabelle sieht so aus.
    Sind nur Beispiele

    Stuffe (tinyint) | Schema(nvarchar20)) | Bezeichnung(nvarchar(20))
    __________________________________________________ _
    12233 | xz234 | xybez


    die erste Prozedur.
    Code:
    .....
    declare @i int
    declare @z int
    declare @stunr_wert nvarchar(10)
    declare @bez nvarchar(10)
    declare @sm_wert nvarchar(10)
    
    set @z=1
    set @i = (select count(*) from dbo.PAR_2)
    
    while @i>0
    begin
    set @stunr_wert = (SELECT stuffe FROM  [dbo].[Par_2] where id=@z)
    set @bez =(SELECT bezeichnung FROM  [dbo].[Par_2] where id=@z)
    set @sm_wert =(SELECT schema FROM  [dbo].[Par_2] where id=@z)
    
    
    execute dbo.test_Parm_p @stunr_wert, @bez, @lsm_wert
    
    set @z=@z+1
    set @i=@i-1
    zweite Prozedur, hier liegt das Problem

    Code:
    ALTER PROCEDURE [dbo].[P_Fkt_Vtrb_ins_2] @stunr_wert nvarchar(10), @bez nvarchar(10), @sm_wert nvarchar(10)
    
    AS
    
    declare @sqlexec nvarchar(4000)
    
    
    BEGIN
    	SET NOCOUNT ON;
    
    set @sqlexec ='
    
    INSERT INTO [dbo].[tbl_Fkt]
    (
    ['+@bez+']
    ,[wert1]
    ,[wert2])
    
    
    SELECT     wert1, wert2
    
    
    
    
    FROM         
    dbo.Test
    
    -- An dieser Stelle ist der Fehler
    
    WHERE     (test.STUNR < '+@stunr_wert+') AND (test.Schema= '+@sm_wert+'
    
    exec(@sqlexec)

  • #2
    Wenn der Wert im Parameter ein String ist, dann muss er unter Hochkommas gestellt werden, ansonsten gilt er als Spaltenname. Bei einer Zahl kann das entfallen, da eine Zahl kein Spaltenname sein kann. Probiere also dort wo es um einen String geht - ich denke jetzt mal, das ist test.Schema - einfach folgendes:
    ...
    WHERE (test.STUNR < '+@stunr_wert+') AND (test.Schema= '+ char(39) + @sm_wert+ char(39)
    ...

    char(39) liefert die fehlenden Hochkommas.

    bye,
    Helmut

    Comment


    • #3
      Hi Helmut, ich bin dir sehr dankbar. Ich habe das Problem mit deinen Tipp gelöst.
      Ich wusste dass es an den Hochkommas liegt, weil es nvarchar ist aber wie man das lösen kann habe ich nicht gewusst und im internet nichts passenden gefunden.

      Danke

      Comment

      Working...
      X