실제 열에서 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'
그리고 "오류가 발생했습니다.
의견이 있으십니까?
이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
@OMG 포니 스 (Ponies) 약간의 경우에도 열 이름을 sp_executesql의 매개 변수로 전달할 수 없으므로 입력의 연결 이유 (값이 매개 변수임을 유의하십시오)가 여전히 위험합니다. –
나는이 주석을 이해하기 위해 고심하고있다. 당신이 인용 한 논문은 훌륭하고 동적 SQL에 대한 표준 읽기입니다. 하지만 상관없이 @PersonColumnID가 삭제되지 않는 한 주어진 코드와 다시 작성시 거대한 SQL 삽입 지점이 있습니다. 질문자가이 사실을 알지 못했을 수도 있습니다. – Yellowfog
SELECT @PersonColumnID = '1; 드롭 데이터베이스를 blah - '; – Yellowfog