2011-11-26 62 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;