2013-03-07 3 views
0

주어진 데이터베이스의 모든 키에 대해 표시 가능한 값으로 ID를 변환하는 저장 프로 시저를 작성하려고합니다. 이를 위해 KeyField 및 DisplayField에 사용할 필드를 지정하는 LookupMap이라는 테이블을 추가했습니다.변수 쿼리에서 out 매개 변수를 반환합니다.

TableName  KeyField  DisplayField 
---------  --------  ------------ 
Company  CompanyId  CompanyName 
Location  LocationId LocationName 

나는 테이블 이름과 키 값을 전달하고 표시 값을 되찾고 싶습니다. 다음은 내가 실패 시도한 것입니다 :

Create Procedure [dbo].[GetLookup] 
@TableName varchar(50), 
@Key varchar(50), 
@DisplayValue varchar(255) out 
AS 
BEGIN 
DECLARE @DisplayField varchar(50) 
DECLARE @IdField varchar(50) 
Select @DisplayField = DisplayField, @IdField = IdField 
    From LookupMap where TableName = @TableName 

DECLARE @sql NVARCHAR(500) 
SET @sql = N'SET @DisplayValue = (SELECT ' + @DisplayField + N' FROM ' + @TableName + 
       N' WHERE ' + @IdField + N' = ''' + @Key + N''')' 

Print @sql 
Set @DisplayValue = (EXEC (@sql)) 

END 

모든 것이 마지막 줄까지 작동하지만, 내가 다시 동적 쿼리에서 값을 얻는 방법을 알고 out 매개 변수에 할당하지 않습니다. 또한 키가 고유하고 일치하는 항목이 하나만있는 것으로 알고 있지만 테이블 결과를 varchar에 할당해야 할 필요가 있음을 알고 있습니다.

내 접근 방식이 잘못되었다고 말해도됩니다.

답변

1

동적 SQL을 통해 변수를 직접 설정하는 대신 임시 테이블을 만들고 insert 문에 exec (@sql)를 사용할 수 있습니다.

그래서

작동
CREATE TABLE #Result (result varchar(50)) 

    DECLARE @sql NVARCHAR(500) 
      SET @sql = N'SELECT ' + @DisplayField + N' FROM ' + @TableName + 
        N' WHERE ' + @IdField + N' = ''' + @Key + N'''' 

    INSERT INTO #Result 
    EXEC(@sql) 

    SELECT @DisplayField = result FROM #Result 
+0

! 매우 감사. –

관련 문제