2011-11-26 55 views
0

當我執行此查詢,我得到錯誤的語法附近關鍵字'視圖'' 請幫助我,這個查詢中的問題是什麼?EXECUTE錯誤sp_executesql

EXECUTE sp_executesql 
N' 
CREATE VIEW LastDayOfMonth 
AS 
SELECT @MAX = MAX(DATEPART(DAY,CurrencyRateDate))AS CurrencyRateDate FROM Sales.CurrencyRate 
WHERE 
DATEPART(YEAR,CurrencyRateDate)[email protected] 
AND 
DATEPART(MONTH,CurrencyRateDate)= @MONTH', 
N' @YEAR CHAR(4),@MONTH CHAR(2)', 
@YEAR = '2004', 
@MONTH = '02'; 

回答

1

有沒有明顯的理由做你在做什麼這裏無論是使用視圖或使用sp_executesql

下面應該工作:

DECLARE @MAX INT 
DECLARE @YEAR INT 
DECLARE @MONTH INT 

SET @YEAR = 2004 
SET @MONTH = 02 

SELECT @MAX = MAX(DATEPART(DAY,CurrencyRateDate))AS CurrencyRateDate FROM Sales.CurrencyRate 
WHERE 
DATEPART(YEAR,CurrencyRateDate)[email protected] 
AND 
DATEPART(MONTH,CurrencyRateDate)= @MONTH 

,並顯示結果:

SELECT @MAX 

如果這是你想不該做什麼,也許你可以編輯的問題和澄清?

+0

嗯,我可以想象一個理由在存儲過程中執行此操作,稱爲Reporting Services ;-)。然而,這並不能解釋視圖的使用。 – vstrien

+0

@vstrien - 我明白你的意思 - 但你爲什麼要在SSRS查詢中創建視圖 - 特別是像這樣簡單的視圖? –

+0

我同意你的意見。當然,從SSRS報告中創建視圖是沒有用的:)。 – vstrien

0

我認爲問題在於使用變量@MAX,它沒有聲明。當你想回到這個價值,你就不會需要一個變量,只是像這樣做:

EXECUTE sp_executesql 
N' 
CREATE VIEW LastDayOfMonth 
AS 
SELECT 
    MAX(DATEPART(DAY,CurrencyRateDate))AS CurrencyRateDate AS Maximum 
FROM Sales.CurrencyRate 
WHERE 
DATEPART(YEAR,CurrencyRateDate)[email protected] 
AND 
DATEPART(MONTH,CurrencyRateDate)= @MONTH', 
N' @YEAR CHAR(4),@MONTH CHAR(2)', 
@YEAR = '2004', 
@MONTH = '02'; 
0

難道你試試這個?:

EXECUTE DATABASENAME..sp_executesql 
N' 
CREATE VIEW LastDayOfMonth 
AS 
SELECT @MAX = MAX(DATEPART(DAY,CurrencyRateDate))AS CurrencyRateDate FROM Sales.CurrencyRate 
WHERE 
DATEPART(YEAR,CurrencyRateDate)[email protected] 
AND 
DATEPART(MONTH,CurrencyRateDate)= @MONTH', 
N' @YEAR CHAR(4),@MONTH CHAR(2)', 
@YEAR = '2004', 
@MONTH = '02'; 

如果仍然出現問題,那麼它的可能會因爲你不能工作parametersviews ..

0

我有一個類似的問題。看起來你不能在視圖中使用參數。而是處理SQL以包含參數:

set @sql = N'create view as select * from table where year = ' + cast(@year as varchar(4)); 
EXECUTE sp_executesql @sql;