2014-09-15 2 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:

 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; 

Вы никогда не устанавливаете @res в SQL. Попробуйте следующее:

 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; 
Смежные вопросы