MS-SQL7, Variable als Spaltenname bei Abfrage

Hallo MS-SQL-Kenner,
ich versuche in einer gespeicherten Prozedur des MS-SQL-Server eine übergebene Variable für eine SELECT-Abfrage zu verwenden. Ich bekomme es jedoch nicht zum Laufen. Ist das nur ein Problem mit der Syntax oder ist das generell nicht möglich?
Hier der (verkürzte) Quelltext, die Variable ist @SettingName und entspricht einem Spaltenname der Tabelle:

CREATE PROCEDURE sp_ReadIni_String
@SettingName varchar(30),
@SettingValue varchar(1000)= ‚‘ OUT
AS

select @SettingValue = (select @ColumnString from tblcfg_UserSettings
where (SQL_UserName LIKE SUSER_SNAME())
AND(ComputerName LIKE Host_NAME()))

So nicht!
hallo,

der sinn von gespeicherten prozeduren
ist vorallem die hinterlegung und speicher-
ung des abarbeitungsprozesses, reihenfolge,
benutzte tabellen und indizes usw.

wenn der spaltenname aber noch nicht feststeht
ist das ganze prinzip ad akta gelegt.

tabellen oder spalten als parameter sind also
deshalb nicht drin. zumindest nicht so.

definiere dir einen cursor und baue den SQL Query als
string in der procedure auf. führe den Query dann gegen
den Cursor aus und lass dir die werte zurückgeben.

gruss

chris

näheres:

http://msdn.microsoft.com/library/en-us/tsqlref/ts_t…

Danke,

genau das habe ich befürchtet.
Ich muß mich da, als MS-SQL-Neuling, wohl
noch etwas intensiver mit beschäftigen.
Vermutlich bin ich durch die flexiblen
Hochsprachen in Windows-Umgebungen
(Delphi) etwas verwöhnt.

der sinn von gespeicherten prozeduren
ist vorallem die hinterlegung und speicher-
ung des abarbeitungsprozesses, reihenfolge,
benutzte tabellen und indizes usw.

Ja - das klingt überzeugend.

wenn der spaltenname aber noch nicht feststeht
ist das ganze prinzip ad akta gelegt.

Das verstehe ich nicht! Sinn der gesamten Prozedur
ist die Abfrage eines „servergespeicherten
benutzerabhängigen Profilwertes“. Wenn noch keine
Daten vorhanden sind, sollen diese durch die
Prozedur mit Defaults erstellt werden. Das
sollte den obigen Intentionen nicht widersprechen.

Wenn ich einen String aufbaue, muß ich den ver-
mutlich mit ExecSql(STRING) ausführen. Das
Ergebnis kann ich wiederum nicht direkt
einer Variablen zuweisen.

Ich versuche das Problem nun wie folgt anzugehen:

Select @SettingValue = (Select Distinct
case @SettingName
When ‚AddDelay‘ Then AddDelay
When ‚Akz‘ Then Akz

Else Failed End
from tblcfg_UserSettings
where (SQL_UserName LIKE SUSER_SNAME())
AND (ComputerName LIKE Host_NAME()))

Das einzige Problem hierbei ist momentan noch,
dass leere Felder vom Typ VarChar(X) als 0
und nicht als leerer String zurückgegeben werden.

Gruß
U.Teichert