Как передать столбец в качестве параметра в хранимой процедуре? - PullRequest
1 голос
/ 23 июня 2010

Как передать и использовать имя столбца для извлечения переменной bigint в фактическом столбце?

DECLARE @personID BIGINT,
DECLARE @queryString varchar(500)

Set @queryString = 'Select @personID = ' + @PersonColumnID + ' from dbo.Loss_Witness where WitnessID = @witnessID'
exec(@queryString)

В сообщении об ошибке указано «Должна быть объявлена ​​переменная @personID»Я также попытался

Set @queryString = 'Select ' + @personID + ' = ' + @witnessPersonID + ' from dbo.Loss_Witness where WitnessID = @witnessID'

и получил сообщение об ошибке «Ошибка преобразования типа данных varchar в bigint.»

Есть мысли?

Ответы [ 2 ]

6 голосов
/ 24 июня 2010

Необходимо указать, что @personID - это выходной параметр с ключевым словом OUTPUT:

DECLARE @SQL NVARCHAR(max)
    SET @SQL = 'SELECT @personID = w.' + @PersonColumnID + ' 
                  FROM dbo.Loss_Witness w
                 WHERE w.witnessID = @witnessID '

BEGIN 

  EXEC sp_executesql @SQL, @personID = @personID OUTPUT, @witnessID

END

Здесь другой пример .

1 голос
/ 24 июня 2010

Также обратите внимание, что в вашем коде может быть дыра в безопасности SQL-инъекций. Если вы не дезинфицируете @PersonColumnID, у вас могут быть большие проблемы.

...