Специальный запрос назначает результаты локальным переменным - PullRequest
0 голосов
/ 05 октября 2009

Привет, я могу как-нибудь это сделать? Когда я запускаю оператор, я получаю исключение, @Price_Plan не задерживается, поэтому очевидно, что у запроса adhoc нет доступа к @Price_Plan. Есть ли обходной путь или лучший способ сделать запрос к таблице, имя которой меняется при выполнении этого запроса.

DECLARE @Price_Plan varchar(3), @MNP_Network varchar(3), @GSM_Code varchar(3), @GEO_Dist varchar(6),
        @Call_ProdNo varchar(7), @Call_Time datetime, @CallId int, @dtl_call_dur int,
        @Volume varchar(10), @Call_Cost int

--Assume CallId has a value

SET @Sql =
    'SELECT
        @Price_Plan = Price_Plan, @MNP_Network = MNP_Network, @GSM_Code = GSM_Code, @GEO_Dist = GEO_Dist,
        @Call_ProdNo = Call_ProdNo, @Call_Time = Call_Time, @dtl_call_dur = dtl_call_dur,
        @Volume = Volume
     FROM ' + @TableName + ' 
     WHERE CallId = ' + CONVERT(varchar(10),@CallId) + ''
    PRINT  @SQL
    EXEC (@Sql)

1 Ответ

3 голосов
/ 05 октября 2009

Вы уверены, что это ошибка? Я проверил этот запрос, и он вернул две ошибки:

- Not declared @TableName
- Not declared @Sql

Когда вы объявляете эти переменные, это должно работать хорошо.

Но лучше использовать sp_executesql .

Пример:

EXEC sp_executesql 
      N'SELECT * FROM AdventureWorks.HumanResources.Employee 
      WHERE ManagerID = @level',
      N'@level tinyint',
      @level = 109;

Первый аргумент - это запрос с параметрами, 2-й аргумент - имена параметров с типами, разделенными запятыми, а затем идут фактические значения параметров.

РЕДАКТИРОВАНИЕ:

Вот еще один пример использования OUTPUT параметра:

DECLARE @retCnt INT

EXEC sp_executesql 
    N'SELECT @retCnt = COUNT(*) FROM sys.tables',
    N'@retCnt INT OUTPUT',
    @retCnt = @retCnt OUTPUT

SELECT @retCnt

SELECT верните 5 на моем компьютере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...