[MSSQL] Jak pobrać wartość pola, gdzie nazwa pola jest zmien

0

OK, mam funkcję skalarną, która ma zwracać mi określone wartości.

W uproszczeniu wygląda to tak, że w parametrze przekazuję jakies tam ID i nazwę pola, którego wartość chcę uzyskać.

Ciało wygląda mniej więcej tak(w dużym uproszczeniu):

SELECT @res = @colName FROM tabela WHERE id = @id
RETURN @res

Problem polega na tym, że zamiast wartości otrzymuję nazwę pola. Jak zrobić, żeby serwer potraktował zmienną @colName jako nazwę pola?

Tzn. chcę, żeby serwer "widział" coś takiego:

SELECT @res = pole FROM tabela WHERE id=@id
RETURN @res
0
declare @colname varchar(25)
set @colname = 'COL1'

exec ('SELECT col3, col4, (SELECT ' + @colname + ' from TABLE1 where cond) from TABLE2 WHERE cond')
0

Dostaję komunikat błędu:

Invalid use of side-effecting or time-dependent operator in 'EXECUTE STRING' within a function.

0
DECLARE @SQL VARCHAR(8000)
SET @SQL = 
  'DECLARE @RES VARCHAR(50) ' + CHAR(13) + CHAR(10) +  -- zmienna res jest takiego samego typu co colName
  'SELECT @RES = ' + @colName + ' FROM tabela WHERE id = ' + CAST(@id AS VARCHAR)

EXEC(@SQL)

0 użytkowników online, w tym zalogowanych: 0, gości: 0