2014-09-15 3 views
0

이 질문에 대한 답변을 얻었으며 이미 인터넷에서 몇 가지 해결책을 찾았습니다. 그러나 여전히 제대로 작동하지는 않습니다.동적 쿼리의 결과를 변수에 저장하십시오.

그래서 .. 나는 SELECT 쿼리를 만들고 변수에 결과를 저장해야합니다 (테이블 변수를 원하지 않습니다). 제 문제는 테이블 이름도 변수라는 것입니다.

DECLARE @numRecord INT; 
DECLARE @maxMacNumber INT; 
SET @maxMacNumber = 500; 
DECLARE @mac INT; 
SET @mac = 0; 
DECLARE @res FLOAT; 
DECLARE @ap INT; 
SET @ap = 0; 
DECLARE @apString VARCHAR(2); 
DECLARE @numRecordString VARCHAR(20); 
DECLARE @tablename VARCHAR(500); 
DECLARE @sql NVARCHAR(500); 
DECLARE @varDefinition NVARCHAR(200); 

WHILE @mac <= @maxMacNumber 
BEGIN 
    SET @numRecord = 6 + @mac * 390; 
    SET @ap = 0; 
    WHILE @ap < 2 
    BEGIN 
      SELECT @apString = CONVERT(VARCHAR,@ap); 
      SELECT @numRecordString = CONVERT(VARCHAR, @numRecord); 
      SELECT @rssiString = CONVERT(VARCHAR, @rssi); 
      SET @tablename = 'APDB.dbo.AP' + @apString; 
      SET @sql = 'SELECT RSSI FROM ' + @tablename + ' WHERE ID=' + @numRecordString; 
      SET @varDefinition = N'@res FLOAT OUTPUT'; 
      EXEC sp_executesql @sql, @varDefinition, @res = @res OUTPUT; 
      PRINT @res; 
      -- HERE I WILL DO SOMETHING WITH @res 
     END; 
END; 

문제는 내가 PRINT @res을 할 때

답변

1

이 관련 SQL 코드는 ... 아무것도 인쇄되지 않는다는 것입니다 : 테이블 이름은 WHILE에 따라 변경, 여기 내 코드입니다

 SET @sql = 'SELECT RSSI FROM ' + @tablename + ' WHERE ID=' + @numRecordString; 
     SET @varDefinition = N'@res FLOAT OUTPUT'; 
     EXEC sp_executesql @sql, @varDefinition, @res = @res OUTPUT; 
     PRINT @res; 

SQL에 @res을 절대로 설정하지 않았습니다. 사용해보기 :

 SET @sql = 'SELECT @res = RSSI FROM ' + @tablename + ' WHERE ID=' + @numRecordString; 
     SET @varDefinition = N'@res FLOAT OUTPUT'; 
     EXEC sp_executesql @sql, @varDefinition, @res = @res OUTPUT; 
     PRINT @res; 
관련 문제