Member 11882484 Ответов: 0

Динамический свод в 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

0 Ответов