Member 12882545 Ответов: 0

"Конструкция или оператор declare SQL не поддерживается" в GridView visual studio 2015


Привет.

У меня есть этот запрос, используя оператор UNPIVOT SQL. Когда я запускаю запрос на SQL server, он выполняется и выдает желаемый результат. Но когда я хочу использовать тот же запрос на функцию Gridview в Visual Studio 2015, используя VB , он говорит, что " конструкция или оператор Declare SQL не поддерживается." Итак, как мне нужно переставить оператор UNPIVOT SQL, поскольку он не поддерживается в gridview?

Что я уже пробовал:

 declare @MyTable table(
 
   [Total Interest] money,
  [Total Principal] money,
  [Total Penalty] money,
  [Total Charged] money

   )

  insert into @MyTable 
  
select (SELECT SUM([Total Interest Overdue(MYR)]) AS [Total Interest Overdue(MYR)] FROM (SELECT SUM(l.interestOverdue) * d.bidspotrate AS [Total Interest Overdue(MYR)] FROM Loan AS l INNER JOIN Danadb AS d ON l.currency = d.ccycode GROUP BY d.bidspotrate) AS [Total in MYR] ),
(SELECT SUM([Total Principal Overdue(MYR)]) AS [Total Principal Overdue(MYR)] FROM (SELECT SUM(l.principalOverdue) * d.bidspotrate AS [Total Principal Overdue(MYR)] FROM Loan AS l INNER JOIN Danadb AS d ON l.currency = d.ccycode GROUP BY d.bidspotrate) AS [Total in MYR] ),
(SELECT SUM([Total Penalty Overdue(MYR)]) AS [Total Penalty Overdue(MYR)] FROM (SELECT SUM(l.penaltyOverdue) * d.bidspotrate AS [Total Penalty Overdue(MYR)] FROM Loan AS l INNER JOIN Danadb AS d ON l.currency = d.ccycode WHERE (l.source = 'Excel ') GROUP BY d.bidspotrate) AS [Total in MYR]),
(  select sum([Total Charged Overdue(MYR)])  as 
 [Total Charged Overdue(MYR)] from (select (SUM (l.chargedOverdue) * d.bidspotrate) as 
 [Total Charged Overdue(MYR)] from loan l, danadb d  where l.currency=d.ccycode   group by d.bidspotrate) as [Total in MYR])

    select [Type], [Total] from
 (select * from @MyTable) Src
  unpivot ([Total] for [Type] in ([Total Interest],[Total Principal],[Total Penalty],[Total Charged])) Res



Результатом запроса является

Тип / Всего
Общая Сумма Процентов | 10039176.9812
Итого Основной Капитал | 92207576.6798
Общий Штраф | 91959.7905
Итого Начислено / 21677.153


-------------------------------------------------------------------

Второй запрос, который я попробовал, это

выберите [всего]
от
(
выберите (Выбрать сумма([сумма просроченных процентов]), как [общая сумма процентов просроченных] из (выбрать сумма(Л. Д. interestOverdue) * д. bidspotrate как [общая сумма процентов просроченных] от кредита а л внутреннее соединение Danadb А Д О Л.валюта = д.группа ccycode д. bidspotrate) как [общее в мир] ), как [интерес],
(Выбрать сумма([общая сумма просроченной]), как [Итого основные просроченных] из (выбрать сумма(Л. Д. principalOverdue) * д. bidspotrate как [Итого основные просроченных] от кредита а л внутреннее соединение Danadb А Д О Л.валюта = д.группа ccycode д. bidspotrate) как [Итого, в мире] ) [основные],
(Выбрать сумма([сумма взыскания просроченной]), как [общая взыскания просроченной] из (выбрать сумма(Л. Д. penaltyOverdue) * д. bidspotrate как [общая взыскания просроченной] от кредита а л внутреннее соединение Danadb А Д О Л.валюта = д.ccycode где (л.группа источник = 'Exсel ') исполнителя D.bidspotrate) как [Итого, в мире]) [наказание],
(выберите сумму ([общая сумма начисленных просроченных платежей]) в качестве
[Общая сумма начисленных просроченных платежей] from (select (SUM (l. chargedOverdue) * d. bidspotrate) as
[Общая сумма начисленной просроченной задолженности] по кредиту l, danadb d, где l. currency=d. ccycode group by d. bidspotrate) как [Итого в MYR]) [Заряжено]) d

оператор UNPIVOT

(
[Итого] на сумму в ([проценты], [основная сумма], [штраф], [начислено])) pvt1

Результат выглядит следующим образом

ВЕСЬ
--------------
10039176.9812472
92207576.6797772
91959.790477519
21677.1530053711


Я хочу, чтобы появился еще один столбец типа TYPE, но я не знал, как это сделать .

Dave Kreskowiak

В этом нет никакого смысла. GridView не выполняет SQL, так Какой же код вы запускаете, чтобы попытаться выполнить этот SQL?

Member 12882545

О, я использую SQLDataSource для привязки SQL-оператора и gridview. Когда я просто использую SQL-оператор типа "select name, address from company" с помощью SQLDataSource, данные можно просмотреть. Но когда я использую оператор UNPIVOT SQL, он показывает ошибку.

Dave Kreskowiak

Снова покажите код. То, что ты говоришь, не имеет смысла.

Member 12882545

Это код, который я использую

объявить таблицу @MyTable(

[Общий процент] деньги,
[Общая сумма основного долга] деньги,
[Общий штраф] деньги,
[Общая сумма начисленных] денег

)

вставить в @MyTable

выберите (Выбрать сумма([сумма просроченных процентов(мыр)]), а [общая сумма процентов просроченной(мыр)] из (выбрать сумма(Л. Д. interestOverdue) * д. bidspotrate как [Итого проценты просроченные(мыр)] в кредит а л внутреннее соединение Danadb А Д О Л.валюта = д.группа ccycode д. bidspotrate) как [Итого в мире] ),
(Выбрать сумма([общая сумма просроченной(мыр)]), а [общая сумма просроченной(мыр)] из (выбрать сумма(Л. Д. principalOverdue) * д. bidspotrate как [общая сумма просроченной(мыр)] в кредит а л внутреннее соединение Danadb А Д О Л.валюта = д.группа ccycode д. bidspotrate) как [Итого в мире] ),
(Выбрать сумма([сумма взыскания просроченной(мыр)]), как [Итого просроченная неустойка(мыр)] из (выбрать сумма(Л. Д. penaltyOverdue) * д. bidspotrate как [Итого просроченная неустойка(мыр)] в кредит а л внутреннее соединение Danadb А Д О Л.валюта = д.ccycode где (л.группа источник = 'Exсel ') исполнителя D.bidspotrate) как [Итого в мире]),
( выбрать сумма([сумма списана просроченная(мыр)]) как
[Общая сумма начисленной просрочки (MYR)] from (select (SUM (l. chargedOverdue) * d. bidspotrate) as
[Общая сумма начисленной просроченной задолженности (MYR)] из кредита l, danadb d, где l. currency=d. ccycode group by d. bidspotrate) как [всего в MYR])

выберите [тип], [Итого] из
(выбрать * из таблицы mytable) ФОК
оператор unpivot ([общего] для [тип] в ([процентные],[общая сумма],[сумма штрафа],[общая заряженных])) Рес

Когда я запускаю код на SQL Server,он дает желаемый результат. Но когда я хочу использовать тот же код на SQLDataSource , на gridview с помощью Visual Studio 2015, он показывает эту ошибку "конструкция или оператор Declare SQL не поддерживается".

Dave Kreskowiak

- Нет! Код в вашем приложении, который вы запускаете для выполнения этого оператора!

Member 12882545

Извините, у меня нет никакого приложения кода as, я просто использую тот же код в SQLDataSource для выполнения кода на Gridview.

CHill60

Уже поздно, так что я могу быть так далеко от базы, но если это работает в вашей среде SQL, но не в вашем коде ... вы уверены, что подключаетесь к одной и той же версии SQL? На самом деле вы еще не показали код, который используете для заполнения GridView. Другой вопрос на самом деле звучит так: "мой запрос неверен, как мне это исправить", так с какой проблемой вы обращаетесь за помощью?

Member 12882545

Да, я на 100% уверен, что подключаюсь к той же версии SQL. Я использую тот же запрос, что и (первый запрос) для заполнения gridview. Я просто хочу знать , как перестроить первый запрос, чтобы он мог показывать свои данные на gridview?

CHill60

Как вы заполняете gridview? Например, вы связываете данные?

Member 12882545

Да, я использую SQLDataSource

Dave Kreskowiak

Для этого вы используете элементы управления данными в панели инструментов. Я бы настоятельно рекомендовал вам этого не делать. Напишите код для выполнения запроса самостоятельно, и вы получите гораздо больше контроля над кодом и не будете иметь кучу функций, скрытых от вас дизайнерами.

Herman<T>.Instance

@Table находится в таблице памяти в базе данных. Он будет работать, если вы создадите хранимую процедуру (SP) с этим SQL-кодом и вызовете SP из своего приложения

Member 12882545

ну ладно . Теперь я понимаю, Спасибо за объяснение :)

0 Ответов