powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Использование результа динамического select в другом selecte
6 сообщений из 6, страница 1 из 1
Использование результа динамического select в другом selecte
    #32031630
Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возник такой вопрос - как использовать результат динамического select в другом selecte.
Допустим есть динамический запрос:

DECLARE @BankBranchID int
DECLARE @PlanID int
DECLARE @AreaID int
DECLARE @FundID int
DECLARE @RestDate datetime

SET @BankBranchID=1
SET @PlanID=2
SET @AreaID=1
SET @FundID=NULL
SET @RestDate='2002-03-14'

DECLARE @SQL nvarchar(4000)
SET @SQL =
'SELECT AccAnlID = aa.AccountAnalyticID,' +
'BankBranchID = aa.BankBranchID,' +
'AccAnlCharacter = aa.AccountCharacter,' +
'AccAnlDateOpen = aa.AccountDateOpen,' +
'AccAnlDateClose = aa.AccountDateClose,' +
'AccSynID = ap.AccountSyntheticID,' +
'FundID = ap.FundID,' +
'AccAnlPicture = ap.AccountPicture,' +
'AccSynPicture = ss.AccountPicture,' +
'LevelID = lv.LevelID,' +
'AreaID = lv.AreaID,' +
'PlanID = lv.PlanID,' +
'(SELECT TOP 1 rs.RestDate FROM AccountsAnalyticRests AS rs WHERE rs.AccountAnalyticID = aa.AccountAnalyticID and rs.RestDate <= '+ char(39)+convert(nvarchar,@RestDate,121)+char(39) +' ORDER BY RestDate DESC) AS RestDate,' +
'(SELECT TOP 1 rs.RestOut FROM AccountsAnalyticRests AS rs WHERE rs.AccountAnalyticID = aa.AccountAnalyticID and rs.RestDate <= '+ char(39)+convert(nvarchar,@RestDate,121)+char(39) +' ORDER BY RestDate DESC) AS RestOut ' +
'INTO #AccAnlRests ' +
'FROM AccountsAnalytic AS aa ' +
'INNER JOIN AccountsAnalyticPictures AS ap ON aa.AccountAnalyticID = ap.AccountAnalyticID ' +
'INNER JOIN AccountsSynthetic AS ss ON ap.AccountSyntheticID = ss.AccountSyntheticID ' +
'INNER JOIN BankLevels AS lv ON ss.LevelID = lv.LevelID ' +
'WHERE isnull(aa.AccountDateOpen, ' +char(39)+'19921104'+char(39)+')<='+char(39)+convert(nvarchar,@RestDate,121)+char(39) +
' AND isnull(aa.AccountDateClose, '+char(39)+'99991231'+char(39)+')>='+char(39)+convert(nvarchar,@RestDate,121)+char(39)


IF @BankBranchID IS NOT NULL
SET @SQL = @SQL + ' AND aa.BankBranchID=' + CAST(@BankBranchID AS nvarchar)

IF @FundID IS NOT NULL
SET @SQL = @SQL + ' AND ap.FundID=' + CAST(@FundID AS nvarchar)

IF @PlanID IS NOT NULL
SET @SQL = @SQL + ' AND lv.PlanID=' + CAST(@PlanID AS nvarchar)

IF @AreaID IS NOT NULL
SET @SQL = @SQL + ' AND lv.AreaID=' + CAST(@AreaID AS nvarchar)

SET @SQL = @SQL + 'ORDER BY aa.BankBranchID, ap.AccountSyntheticID, ap.FundID, ap.AccountPicture'

EXEC (@SQL)

далее мне нужно RestOut сгруппированные по AccSynID

SELECT AccSynID = rs.AccountSyntheticID,
AccSynPicture = rs.AccountPicture,
RestDate = rs.RestDate,
RestOut = SUM(rs.RestOut)
FROM #AccAnlRests AS rs
GROUP BY 1
ORDER BY 2

- здесь выдает ошибку, что не найден объект #AccAnlRests
В первом запросе не получается группировка, т.к. RestOut - есть результат подзапроса.

Подскажите есть тут какой выход?
...
Рейтинг: 0 / 0
Использование результа динамического select в другом selecte
    #32031633
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так как временные таблицы имеют область видимости, Вы и получаете ошибку...
На скорую руку можно внести второй запрос в динамический, например так (пример на учебной базе Northwind):

EXEC('SELECT OrderID, CustomerID INTO #TMP FROM Northwind.dbo.Orders; SELECT CustomerID, COUNT(*) CNT from #TMP GROUP BY CustomerID ORDER BY CNT')

Удачи
...
Рейтинг: 0 / 0
Использование результа динамического select в другом selecte
    #32031634
А что за АБС если не секрет ?
...
Рейтинг: 0 / 0
Использование результа динамического select в другом selecte
    #32031667
Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 jimmers: Спасибо, все получилось.

2 Ипатько Игорь: это не АБС, а что-то вроде хранилища
(громко сказано); а АБС - ДиасофтБанк4х4 DOS
...
Рейтинг: 0 / 0
Использование результа динамического select в другом selecte
    #32031687
Понятно.Мы на DiasoftBank Workflow Prof.
А каким образом данные из Btrieve перегоняете в SQL.
Через ODBC или text.Самое интересное что когда сидели
на btrive'e нам не требовалось перегонять по той простой причине что испольуя ODBC-драйвера от Intersolve и правленные DDF от Псковбанк удавалось получать SQL-отчетность в OLTP.Напр.отчет "Клиенты и их счета" стандартным генератором отчетов строился 40-60 мин.Через ODBC (с учетом ее природной тормознутости) получали за 30-90 сек.Что касается запроса как альтернативу jimmers можно предложить использование не временной таблицы.В динамичсеком
SQL по окончании отработки запроса временная таблица удаляется-отсюда и были проблемы...
...
Рейтинг: 0 / 0
Использование результа динамического select в другом selecte
    #32031774
Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Ипатько Игорь:
Данные перегоняем так:
импорт Btrieve -> XML прогой на Visual FoxPro с использованием библиотеки DBTrieve (заметно быстрее ODBC),
экспорт XML-SQL также VFP прогой через ODBC (используя
вызовы ХП SQL сервера).
Игорь, интересно Ваше мнение о WorkFlow - насколько производительнее стала (по сравнению с DOS версией), если можно тех. характеристики Вашей АБС (к-во рабочих мест,
приблизилеьное к-во клиентов и ср. к-во документов в день),
как давно работаете на WorkFlow, насколько трудный был переход с DOS версии?
Чтобы нам не засорять данный форум пишите сюда:
cor@tele-kom.ru
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Использование результа динамического select в другом selecte
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]