У меня динамическая инструкция sql, и я считаю, что она будет работать с проблемой, которую я имею, когда создаю процедуру, в которой оператор выбора имеет проблему с '' Quote ''.Динамическая ошибка строки SQL при выборе оператора
Вот моя процедура.
CREATE PROCEDURE GetPanelData(@FirstYear int = null, @SecondYear int = null, @ThirdYear int = null, @CompanySelected int = null)
AS
SET NOCOUNT ON;
DECLARE @SQL NVARCHAR(4000);
DECLARE @ParameterDefinition NVARCHAR(4000);
SELECT @ParameterDefinition = '@Year1 int,
@Year2 int,
@Year3 int,
@companyID int';
SELECT @SQL = N'
SELECT FirstColumn.Type,
FirstColumn.YearPanelCount,
SecondColumn.YearPanelCount
FROM
(SELECT ''Quote'' AS Type, sum(mdl.Panel) AS YearPanelCount
FROM Model mdl, Quote QT, Quote_Line_Items QLT, Products Prd
WHERE QT.QuoteID = QLT.QuoteID AND
QLT.ProductID = Prd.ProductID AND
Prd.ModelID = mdl.ModelID AND
DATEPART(YYYY, QT.Quote_Date) = @Year1 AND
Prd.CompanyID = @companyID) AS FirstColumn
';
IF @SecondYear IS NOT NULL
SELECT @SQL = @SQL + N'
inner join(
SELECT ''Quote'' AS Type, sum(mdl.Panel) AS YearPanelCount
FROM Model mdl, Quote QT, Quote_Line_Items QLT, Products Prd
WHERE QT.QuoteID = QLT.QuoteID AND
QLT.ProductID = Prd.ProductID AND
Prd.ModelID = mdl.ModelID AND
DATEPART(YYYY, QT.Quote_Date) = @Year2 AND
Prd.CompanyID = @companyID) AS SecondColumn
on FirstColumn.Type = SecondColumn.Type
';
IF @ThirdYear IS NOT NULL
SELECT @SQL = @SQL + N'
inner join(
(SELECT ''Quote'' AS Type, sum(mdl.Panel) AS YearPanelCount
FROM Model mdl, Quote QT, Quote_Line_Items QLT, Products Prd
WHERE QT.QuoteID = QLT.QuoteID AND
QLT.ProductID = Prd.ProductID AND
Prd.ModelID = mdl.ModelID AND
DATEPART(YYYY, QT.Quote_Date) = @Year3 AND
Prd.CompanyID = @companyID)) AS ThirdColumn
on FirstColumn.Type = ThirdColumn.Type
';
EXEC sp_executeSQL @SQL,
@ParameterDefinition,
@Year1 = @FirstYear,
@Year2 = @SecondYear,
@Year3 = @ThirdYear,
@CompanyID = @CompanySelected;
GO
EXEC GetPanelData @FirstYear = 2012, @SecondYear = 2013, @CompanySelected = '1';
Кто-нибудь знает, почему я получаю эту ошибку, когда запускаю ее. Msg 102, Level 15, State 1, Line 27 Неправильный синтаксис рядом с полем «Цитата».
Когда я запускаю запрос SELECT 'Quote', sum (mdl.Panel) работает, но по какой-то причине в этом случае он не может.
Показать фактическую сгенерированную котировку. «Строка 27» бесполезна, не видя, что такое конечный продукт. –
показать значение @SQL перед этой строкой EXEC sp_executeSQL – HaveNoDisplayName
Буквально просто хочу, чтобы это отображалось как | ТИП | YearPanelCount | | Цитировать | 1029 (напр.) | Невозможно ли просто выбрать статическое значение в качестве первого выбора? –