2013-04-17 3 views
0

다음 코드를 반환하는 SP가 있습니다. TableName, IdentityColumnName, CodeColumn 및 ConditionColumn을 전달합니다. 간단한 것은 동적 쿼리 결과를 변수에 저장하고이 쿼리가 단일 값을 반환한다는 것입니다. 이 SP는 3 개의 테이블에서 작동합니다. 문제는 내 동적 쿼리가 @query 변수, 모든 도움말로 설정되어 있지 않습니다.동적 쿼리 결과를 변수로 복원

ALTER PROC [dbo].[usp_GetNextCode] 
    (
     @IdColumnName nvarchar(20)= 'HeadId',     
     @CodeColumnName nvarchar(100)= 'HeadCode',   
     @TableName nvarchar(50)= 'Head',      
     @MaxColumnName varchar(50) = 'FamilyId',    
     @MaxColumnValue varchar(3) = 1      
    ) 
    AS 
    BEGIN 
     DECLARE @query varchar(max) , @NewId VARCHAR(30),@LastCode varchar(30) 
     ---First Get the Last Inserted Code and save it in a Variable.. 
     SET @query = 'Select  '+ @LastCode +'='+ @CodeColumnName +' 
         FROM   Account.' + @TableName 
        + ' Where ' + @IdColumnName + ' = (
            SELECT  MAX(' + @IdColumnName + ' ) 
            FROM  Account.' + @TableName +' 
            where  '+ @MaxColumnName + ' = ' + @MaxColumnValue +')' 
     Select @query 
     EXEC(@query) 
     Select @LastCode 
    END 

답변

1

당신은 당신이 당신의 동적 쿼리에 대한 출력 매개 변수를 사용/필요를 원하기 때문에 sp_executesql를 사용해야합니다 : 순간

ALTER PROC [dbo].[usp_GetNextCode] 
(
    @IdColumnName nvarchar(20)= 'HeadId',     
    @CodeColumnName nvarchar(100)= 'HeadCode',   
    @TableName nvarchar(50)= 'Head',      
    @MaxColumnName varchar(50) = 'FamilyId',    
    @MaxColumnValue varchar(3) = 1 
) 
AS 
BEGIN 

     DECLARE @query nvarchar(max) , @NewId VARCHAR(30),@LastCode varchar(30) 
     DECLARE @parms nvarchar(max) 
     ---First Get the Last Inserted Code and save it in a Variable.. 
     SET @query = 'Select  @LastCode='+ @CodeColumnName +' 
         FROM   Account.' + @TableName 
        + ' Where ' + @IdColumnName + ' = (
            SELECT  MAX(' + @IdColumnName + ' ) 
            FROM  Account.' + @TableName +' 
            where  '+ @MaxColumnName + ' = ' + @MaxColumnValue +')' 
     SET @parms = '@LastCode varchar(30) output' 
     Select @query 
     EXEC sp_executesql @query,@parms,@LastCode output 
     Select @LastCode 
END 

, 당신은에 @LastCode을 연결하고 당신의 @query 문자열 - NULL이므로 전체 @query 문자열은 NULL이됩니다.

+0

Msg 214, 수준 16, 상태 2, 프로 시저 sp_executesql, 줄 1 프로 시저 'ntext/nchar/nvarchar'형식의 '@statement'매개 변수가 필요합니다. 위의 오류 –

+0

이 표시됩니다 ... –

+0

고맙습니다. –

관련 문제