2010-01-27 7 views
3

@count nvarchar (최대)nvarchar 값을 int로 변환 할 때 변환에 실패했습니다.

선언
set @count ='select COUNT(*) from '+ @tablename+'' 

if(@count =0) 
begin 
    print 'fail' 
end 
else 
begin 
    print 'success' 
end 
end 
@count 변수가 값 0을 가져 오지 않습니다.

로 오류를 표시합니다. nvarchar 값을 변환 할 때 변환이 실패했습니다 'tab_name에서 COUNT (*) 선택 '을 데이터 유형 int로 변경하십시오.

+0

'@ COUNT'은 유효한 값이 아닌 SELECT COUNT (*) FROM xxxx 값을 가진 varchar이기 때문에 작동하지 않습니다. :) 답변에 설명 된대로 동적 SQL을 사용하십시오. –

답변

3

입니다 ork :

DECLARE @SQLString nvarchar(500); 
DECLARE @ParmDefinition nvarchar(500); 
DECLARE @count int 

SET @SQLString = N'SELECT @CountOUT = COUNT(*) FROM ' + @tablename; 
SET @ParmDefinition = N'@CountOUT int OUTPUT'; 

EXECUTE sp_executesql @SQLString, @ParmDefinition, @[email protected] OUTPUT; 

SELECT @count; 
+0

나중에이 작업이 나에게 도움이됩니다! 너희들 – Innova

+0

고맙지 만이 두 줄에 대해 나를 깨끗하게 해줄거야. 'OUTPUT' SET @ParmDefinition = N '@ CountOUT int OUTPUT'; 및 @ CountOUT = @ 카운트 OUTPUT; – Innova

+0

내 대답에 따라 가능한 SQL 주입 문제 – AdaTheDev

1

에 한번 선언 @countint가 AS :

DECLARE @count AS INT 
SELECT @count = COUNT(*) FROM YourTable 

문제는 당신이 다음 쿼리의 결과를 저장하지 않습니다 (문자열 인) @countAsString

SELECT @countAsString = 'SELECT ...' 

을 할 경우,하지만 문자열 자체.

동적으로 생성 된 쿼리를 실제로 실행하려면 EXEC을 사용하십시오.

+0

나중에 나는 동일한 문제가 발생했습니다. varchar 값을 데이터 유형 int로 변환 할 때 변환이 실패했습니다. – Innova

5
DECLARE @Count INTEGER 
DECLARE @nSQL NVARCHAR(1000) 
SET @nSQL = 'SELECT @Count = COUNT(*) FROM ' + @tablename 
EXECUTE sp_executesql @nSQL, N'@Count INTEGER OUT', @Count OUT 

-- Now check @Count 

SQL 삽입까지 열어두면 동적 SQL에주의하십시오. 그러므로 @tablename이 삭제되었는지 확인하십시오. 당신이 알고, -1에

DECLARE @Count INTEGER 
DECLARE @nSQL NVARCHAR(1000) 
SET @nSQL = 'IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE [email protected]) 
    SELECT @Count = COUNT(*) FROM ' + @tablename + ' 
ELSE 
    SELECT @Count = -1' 

EXECUTE sp_executesql @nSQL, N'@TableName NVARCHAR(128), @Count INTEGER OUT', @TableName, @Count OUT 

@Count 다음 오면 아웃 :

한 검사는 테이블이 동적 쿼리를 시도하기 전에 매개 변수화 쿼리를 사용하여 존재 확인하여,이 같은 것이 안전합니다 TABLENAME이 유효 때문이다

편집 :에서 sp_executesql에
참조 이것은 W해야 here

관련 문제