2009-10-05 108 views
0

嗨,我可以以某種方式做到這一點嗎?當我運行聲明時,我得到一個異常,@Price_Plan不是拖拉,所以很顯然,特設查詢沒有範圍訪問@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) 

回答

3

您確定這是該錯誤?我測試了一下查詢,並將其返回兩個錯誤:

- 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; 

第一個參數是與指標的影響,第二參數中的查詢 - 用逗號分隔類型參數的名稱,然後進入所述參數的實際值。

編輯:

這裏是另一個例子使用OUTPUT參數

DECLARE @retCnt INT 

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

SELECT @retCnt 

我的計算機上選擇回報率5。

+0

我剛剛複製並粘貼了更大的過程中的一部分查詢,無論如何,我試圖解決的問題是,我需要將@Price_Plan分配給從adhoc查詢返回的值,應該是一行 – Neil 2009-10-05 14:55:49

+0

我已經使用OUTPUT參數添加了一個例子。檢查這個。這應該是你需要的。 – 2009-10-05 15:15:45

+0

我可以指定表作爲參數嗎?我試過了,但它沒有用,會試試更多,只是想知道sproc是否支持它 – Neil 2009-10-06 06:04:38