2012-08-27 2 views
1
CREATE PROCEDURE dbo.usp_testing 

AS 
BEGIN 
DECLARE @STATE INT,@TBLNAME sysname,@TrID VARCHAR(50),@FAMILYID VARCHAR(50),@SQL varchar(8000) 

DECLARE cur CURSOR FOR 
SELECT TrID,TableName 
FROM LogTable 
WHERE Prefix='vid' 
AND YEAR(DateTime)=YEAR(GETDATE())AND MONTH(DateTime)=MONTH(GETDATE())AND DAY(DateTime)=DAY(GETDATE()) 

OPEN cur 

FETCH NEXT FROM cur 
INTO @TrID,@TBLNAME 

IF(@TBLNAME='Student' OR @TBLNAME='Family' OR @TBLNAME='College') 
BEGIN 
**select @SQL='SELECT MemberID FROM'+' '[email protected]+' '+'where TrId='[email protected] 
select @FAMILYID=EXEC(@SQL)** 

이 줄에는 오류가 표시됩니다.저장 프로 시저에서 Tablename을 변수로 사용하는 변수의 열 값에 액세스해야합니다.

select @SQL='select @ID=(SELECT MemberID FROM'+' '[email protected]+' '+'where TrId='[email protected] +')' 

뿐만 아니라이 너무

exec(@sql) 

END 

END 
GO 

에서 나는

ALTER PROCEDURE [dbo].[USP_TESTSP] 

AS 
BEGIN 
DECLARE @SQL nvarchar(max),@TABLENAME sysname,@id nvarchar(max) 
    SELECT @TABLENAME='student' 
    select @SQL= 'select @id=MemberID FROM'+' '[email protected]+' '+'where TrId=11091' 
    exec sp_executesql @SQL,'@id nvarchar(max)output',@[email protected] output 
    --select exec (@SQL) 

END 
아래에 설명 된 바와 같이, 나는 몇 가지 변경을 수행 한 변수 @ID

안녕에 MEMBERID을 둘 필요

, 오류 :

프로 시저 'ntext/nchar/nvarchar'형식의 '@parameters'매개 변수가 필요합니다.

답변

1

동적 쿼리의 형식 인수가 '@id nvarchar(max)output', 선언 sp_executesql의 매개 변수, 유니 코드 문자열이어야합니다. 거래-SQL에서 문자열 상수가 실제로 유니 코드 문자열로 지정하려면 다음과 같이 여는 따옴표 이전 N을 넣어해야합니다

N'@id nvarchar(max)output' 

그래서 USP_TESTSP은 다음과 같아야합니다

ALTER PROCEDURE [dbo].[USP_TESTSP] 

AS 
BEGIN 
DECLARE @SQL nvarchar(max),@TABLENAME sysname,@id nvarchar(max) 
    SELECT @TABLENAME='student' 
    select @SQL= 'select @id=MemberID FROM'+' '[email protected]+' '+'where TrId=11091' 
    exec sp_executesql @SQL,N'@id nvarchar(max)output',@[email protected] output 
    --select exec (@SQL) 

END 
+0

잘못된 열 이름 '11091'이 나타납니다. – Aada

+0

감사합니다. Andriy에게 도움을주십시오. – Aada

1

이 출력 매개 변수와 함께 sp_executesql 사용을 고려 :

declare @SQL nvarchar(max) 
set @SQL='SELECT @FAMILYID = MemberID FROM ' + @TBLNAME + ' where TrId=' + @TrID 
exec sp_executesql @SQL, N'@FAMILYID int out', @FAMILYID = @FAMILYID out 
+0

다음과 같은 오류가 발생합니다. 프로 시저 'ntext/nchar/nvarchar'형식의 '@parameters'매개 변수가 필요합니다. – Aada

+0

어쩌면''@FAMILYID int out''을''@FAMILYID nvarchar (max) out ''으로 변경해야합니까? – Parado

+0

나는했다! 위의 질문을 편집했습니다. SQL Server 2008에서 언급 한 오류가 발생했습니다. – Aada

0

그것은 나를 위해 작동 :

select @SQL='SELECT @FAMILYID=MemberID FROM'+' '[email protected]+' '+'where TrId='[email protected] 
select EXEC(@SQL) 
+0

제게 이것은'스칼라 변수를 선언해야합니다 "@familyid"'어떤 SQL Server 버전을 사용하고 있습니까? – Andomar

+0

sybase를 사용합니다 :) db에 대한 정보가 없습니다. – Parado

+0

Sql Server 2008 – Aada

관련 문제