SQL indirekt Spalten ansprechen

  • Hallo,
    kann man in Transact SQL Spalten einer Tabelle indirekt beschreiben.
    Was ich darunter verstehe:
    Tabelle Test hat die Spalten Test1,Test2,Test3
    Ich lege eine Prozedur an, wo ich eine StringVariable @Var1 mit dem Text :'Test2' beschreibe!
    Besteht jetzt die Möglichkeit, mit dem Inhalt dieser Variablen zu arbeiten um die Spalte 'Test2' mit einem beliebigen Inhalt zu beschreiben??
    Vielen Dank für Eure Tipps!

  • Bei Sybase kannste dynamisches SQL verwenden. Bastele Dir das Statement einfach in einer Variable zusammen, dan fuehrst Du es mit exec(@variable) aus.

  • SQL Exec Befehl


    Vielen Dank für's Erste an die beiden Tippgeber!
    Leider meckert er mir dann doch recht häufig bei Eingabe folgender
    Zeilen


    update Tabellexyz.dbo.Stueckzahlen
    exec ('set niO_0001 =''1''')


    mit 'Incorrect Syntax near the keyword 'exec'. :confused:


    ... zum Haareraufen!!!!! :mad:

  • Du solltest die komplette Anweisung an den exec-Befehl übergeben, also ungefähr so:
    exec('update Tabellexyz.dbo.Stueckzahlen set niO_0001 =''1'' ').
    Die Anweisung kannst Du natürlich vorher in einer String-Variablen zusammenbasteln und dann dem exec diese Variable übergeben.


    Thomas

  • Wobei eine Kombination aus den beiden genannten Moeglichkeiten nicht funktioniert, also ein exec('update Tabellexyz.dbo.Stueckzahlen set '+@spalte+' =''1'' ').

  • neues Problem


    Hat bis hierher alles wunderbar geklappt, DANKE!
    Jedoch habe ich natürlich jetzt irgendwie das von Harlekyn angesprochene Problem!
    bei Eingabe folgender Zeilen:
    declare @sqlstring varchar(100)
    declare test int
    set @sqlstring=' test'
    set test='2'
    select test
    exec('declare test int set '+@sqlstring+'=''1'' select test')
    /* also das Gleiche wie
    exec('declare test int set test =''1'' select test') */


    select test


    sieht man, dass es sich hier um eine globale und lokale Variable test
    handelt!
    Gibt es die Möglichkeit, dem Exec Befehl den Wert für test von 'Extern' zu übermitteln?


    :confused:

  • Funktioniert Dein

    Code
    exec('declare @Test int set '+@sqlstring+'=''1'' select @Test')

    ? Bei Sybase geht genau das naemlich nicht - MSSQL kenn ich aber nicht ;)


    Zitat

    Gibt es die Möglichkeit, dem Exec Befehl den Wert für test von 'Extern' zu übermitteln?


    Nein, das geht nicht... das Statement im exec() wird quasi in einer eigenen, neuen Session ausgefuehrt. Du kannst auf davor deklarierte Variablen nicht zugreifen (weder den Inhalt rauslesen, noch etwas reinschreiben).


    Entweder Du deklarierst Dir in dem dynamischen SQL wieder eine neue Variable, und bastelst den SQL-String so zusammen, dass dieser der externe Wert zugewiesen wird. Oder Du baust die externe Variable an den entsprechenden Stellen direkt ein (also dann immer exec('...'+@variable+'...'+@variable).


    Schonmal viel Spass beim Debuggen, wenn Du so groessere Statements erzeugst ;)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!