ошибка в EXECUTE sp_executesql - PullRequest
       23

ошибка в EXECUTE sp_executesql

0 голосов
/ 26 ноября 2011

когда я выполняю этот запрос, я получаю сообщение об ошибке "Неверный синтаксис рядом с ключевым словом" ПРОСМОТР ", пожалуйста, помогите мне, в чем проблема в этом запросе?

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

Ответы [ 4 ]

1 голос
/ 26 ноября 2011

Нет очевидных причин делать то, что вы здесь делаете, используя представление или 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)=@YEAR
AND
DATEPART(MONTH,CurrencyRateDate)= @MONTH

и показывать результат:

SELECT @MAX

Если это не то, что вы пытаетесь сделать, возможно, вы могли бы отредактировать вопрос и уточнить?

0 голосов
/ 04 декабря 2015

У меня была похожая проблема.Кажется, что вы не можете использовать параметры с представлением.Вместо этого обработайте SQL, чтобы включить параметры:

set @sql = N'create view as select * from table where year = ' + cast(@year as varchar(4));
EXECUTE sp_executesql @sql;
0 голосов
/ 26 ноября 2011

Не могли бы вы попробовать это?:

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

Если у вас все еще есть проблемы, вероятно, это будет потому, что вы не можете работать parameters с views ..

0 голосов
/ 26 ноября 2011

Я думаю, что проблема в использовании переменной @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)=@YEAR
AND
DATEPART(MONTH,CurrencyRateDate)= @MONTH',
N' @YEAR CHAR(4),@MONTH CHAR(2)',
@YEAR = '2004',
@MONTH = '02';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...