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!
SQL indirekt Spalten ansprechen
-
-
-
Bei Sybase kannste dynamisches SQL verwenden. Bastele Dir das Statement einfach in einer Variable zusammen, dan fuehrst Du es mit exec(@variable) aus.
-
Das sollte beim M$ SQL Server auch mit EXEC funktionieren,
die Online-Doku ist Dein Freund...Gruß, Thomas
-
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
Zeilenupdate 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
? Bei Sybase geht genau das naemlich nicht - MSSQL kenn ich aber nicht
ZitatGibt 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!