Динамический свод в SQL server 2012
я получаю ошибку в своем динамическом сводном запросе в sql server 2012
Что я уже пробовал:
USE [BMS] GO /****** Object: StoredProcedure [dbo].[sp_SearchParticularsDetails] Script Date: 12-07-2016 11:19:44 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER procedure [dbo].[sp_SearchParticularsDetails] ( @fromdate datetime, @todate datetime ) as begin declare @columnname as varchar(100) select @columnname=ISNULL(@columnname+',','')+QUOTENAME(Expenses_Name) from (select distinct Expenses_Name from dbo.Expenses) as Expenses_Name select * from ( select dbo.CreditDebit.ID as SLNO,TransactionDate,Particular,Balance,Expenses,Credit_Expenses,Debit_Expenses,','+@columnname FROM DBO.CreditDebit INNER JOIN DBO.CreditExpenses on dbo.CreditDebit.ID=dbo.CreditExpenses.Credit_ID inner join dbo.Expenses on dbo.Expenses.ID=dbo.CreditExpenses.Expenses_ID where dbo.CreditDebit.TransactionDate between @fromdate and @todate ) as details pivot( sum(Expenses) for Expenses_Name in()as pvt end
ошибка, которую я получаю в '+@columnname, details and ('+@columnname+')
Patrice T
Никаких репостов пожалуйста
Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Suvendu Shekhar Giri
Но вы нигде не написали эту строку в запросе, т. е.,
'+@имя_столбца,детали и ('+@имя_столбца+')
Можете ли вы поделиться фактическим сообщением об ошибке?
Member 11882484
я написал это так, как вы видите еще раз
объявите @columnname как varchar(100)
выберите @имя_столбца=функция isnull(@имя_столбца+',',")+функции quotename(Expenses_Name) из (выбрать различные Expenses_Name от dbo.Расходы) как Имя_расходов
выберите * из
(
выберите dbo.Кредитдебит.ID, как сльно,TransactionDate,в частности,баланс,расходы,Credit_Expenses,Debit_Expenses,','+@имя_столбца
ОТ ДБО.CreditDebit
ВНУТРЕННЕЕ СОЕДИНЕНИЕ DBO.CreditExpenses
на dbo.Кредитдебит.ИД=ДБО.CreditExpenses.Credit_ID внутреннее соединение
ДБО. расходы на ДБО.Расходы.ИД=ДБО.CreditExpenses.Expenses_ID
где
ДБО.CreditDebit.TransactionDate между @fromdate и todate в сочетании
) как детали
стержень(
сумма (расходы)
для Expenses_Name in()as pvt
Member 11882484
любой, кто знает, может мне помочь..
Shweta N Mishra
динамический Pivot не работает до тех пор, пока вы не используете динамический запрос, то есть вам нужно подготовить строку запроса с динамическими столбцами, а затем выполнить ее.
Member 11882484
да, но как это сделать .если ты знаешь, то скажи мне.Вот мой запрос
объявите @expenseNames nvarchar(max) = ";
выберите @expenseNames += случай, когда datalength(@expenseNames) = 0 тогда " еще ', ' конец + '[' + функция ltrim(функция rtrim(Expenses_Name)) + ']'
от расходов
объявите @dynamicSQL nvarchar(max)=";
set @dynamicSQL =
'select * from
(выберите dbo.CreditDebitExpenses.ID, как сльно, TransactionDate, частности,Expenses_Name,Debit_Expenses,Credit_Expenses,расходы,
Баланс от dbo.CreditDebitExpenses внутреннее соединение
ДБО.CreditExpenses на ДБО.CreditDebitExpenses.ИД=ДБО.CreditExpenses.Credit_ID
внутреннее соединение dbo.Расходы на ДБО.Кредитные расходы.Expenses_ID=ДБО.Расходы.Идентификатор
) src
стержень
(
сумма (расходы)
для Expenses_Name In (' +@expenseNames+ ')
)как рядовой'
здесь я использую его динамически, но его возврат равен -1