Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 динамическое представление  [new]
Vitalic_Hekto
Member

Откуда:
Сообщений: 60
добрый день. нужна помощь.
имеется MS SQL server 2008 в него экспортирована БД Access. переписываю запросы под представления и линкую их к клиентской БД. Столкнулся с проблемой:
для некоторых пользователей были сделаны перекрестные запросы в акцесе и они ими пользовались средствами Excel, а теперь, на сколько я понял из тонны перелопаченных статей, реализовать это через MS SQL server не получится?
View ругается на declare, Сохранил свой запрос в хранимой процедуре (как сохранить в хранимой функции чтобы она возвращала таблицу пока не разобрался). но вот как вызвать эту хранимую процедуру в представлении не догоняю.

решение с stackoverflow не получается. временные таблицы не понимаю как меня спасут.

как мне вывести динамический перекрёстный запрос в excel незнаю. помогите!!
17 ноя 15, 19:18    [18431506]     Ответить | Цитировать Сообщить модератору
 Re: динамическое представление  [new]
Vitalic_Hekto
Member

Откуда:
Сообщений: 60
Вот мой запрос. Типы из таблицы НомерЗаказа могут добавляться. И каждый раз править запрос отслеживая добавления нового Типа не резонно. Может на триггеры вешать какие-то?
DECLARE @columns VARCHAR(8000)
SELECT @columns = COALESCE(@columns + ',[' + CAST([Тип] AS VARCHAR) + ']', '[' + CAST([Тип] AS VARCHAR)+ ']')
FROM  dbo.НомерЗаказа
GROUP BY [Тип]


DECLARE @query NVARCHAR(4000)

SET @query = 'select * from (select Тип, КраткоеНаименование, ТипПродукции, Метраж, Остаток from СрочныеЗаказы group by КраткоеНаименование, ТипПродукции, Метраж, Тип, Остаток) AS SourceTable Pivot( Sum([Остаток]) for Тип IN (' + @columns + ')) AS PVT;'

EXECUTE SP_EXECUTESQL @query
17 ноя 15, 20:01    [18431725]     Ответить | Цитировать Сообщить модератору
 Re: динамическое представление  [new]
Glory
Member

Откуда:
Сообщений: 104760
Vitalic_Hekto
Столкнулся с проблемой:
для некоторых пользователей были сделаны перекрестные запросы в акцесе и они ими пользовались средствами Excel, а теперь, на сколько я понял из тонны перелопаченных статей, реализовать это через MS SQL server не получится?

https://www.sql.ru/faq/faq_topic.aspx?fid=571
17 ноя 15, 21:05    [18431993]     Ответить | Цитировать Сообщить модератору
 Re: динамическое представление  [new]
Vitalic_Hekto
Member

Откуда:
Сообщений: 60
Glory,

Спасибо, но опять же, как мне сохранить вызов этой процедуры в представление?? Я уже имею сохраненную динамическую процедуру дающую результат.

П.С. на сколько я понимаю на вход этой процедуры нужно в первом параметре только таблицу подавать? Запрос не покатит?

П.П.С. Я уже натыкался на эту статью.
17 ноя 15, 21:19    [18432052]     Ответить | Цитировать Сообщить модератору
 Re: динамическое представление  [new]
Glory
Member

Откуда:
Сообщений: 104760
Vitalic_Hekto
как мне сохранить вызов этой процедуры в представление??

Зачем ?

Vitalic_Hekto
Я уже имею сохраненную динамическую процедуру дающую результат.

И что мешает вам ее использовать ?

Vitalic_Hekto
П.С. на сколько я понимаю на вход этой процедуры нужно в первом параметре только таблицу подавать? Запрос не покатит?

Ну переделайте под запрос
17 ноя 15, 21:22    [18432066]     Ответить | Цитировать Сообщить модератору
 Re: динамическое представление  [new]
Vitalic_Hekto
Member

Откуда:
Сообщений: 60
Glory,

Ексель видит только таблицы или представления на ms sql

Как мне вырубился из этой ситуации? Либо строить запрос в самом ексель и выходить за пределы одной экосистемы, либо выгружать в ексель плоскую таблицу на один лист и строить сводный средствами самого ексель на другом листе...
17 ноя 15, 21:31    [18432091]     Ответить | Цитировать Сообщить модератору
 Re: динамическое представление  [new]
Vitalic_Hekto
Member

Откуда:
Сообщений: 60
Прошу прощения за т9. Пишу с телефона)
17 ноя 15, 21:31    [18432097]     Ответить | Цитировать Сообщить модератору
 Re: динамическое представление  [new]
Glory
Member

Откуда:
Сообщений: 104760
Vitalic_Hekto
Ексель видит только таблицы или представления на ms sql

да что вы говорите !

Vitalic_Hekto
Как мне вырубился из этой ситуации? Либо строить запрос в самом ексель и выходить за пределы одной экосистемы, либо выгружать в ексель плоскую таблицу на один лист и строить сводный средствами самого ексель на другом листе...

написать вызов процедуры
17 ноя 15, 21:34    [18432104]     Ответить | Цитировать Сообщить модератору
 Re: динамическое представление  [new]
Vitalic_Hekto
Member

Откуда:
Сообщений: 60
Glory
да что вы говорите !

я правильно понимаю что это делается средствами VBA ?

Вообще ребята я жутко облажался, прошу прощения)
ведь сразу при подключении таблицы к екселю из sql я могу создать необходимую мне сводную таблицу. хоть это и не так красиво как сразу получить готовую таблицу, но для поставленных задач я думаю сгодится.
хоть для её построения и используются локальные ресурсы но все же это быстрее :)
17 ноя 15, 22:05    [18432222]     Ответить | Цитировать Сообщить модератору
 Re: динамическое представление  [new]
Glory
Member

Откуда:
Сообщений: 104760
Vitalic_Hekto
я правильно понимаю что это делается средствами VBA ?

Нет
Это делается переключением из режима дизайнера запросов в режим ручного ввода исполняемого кода
17 ноя 15, 22:08    [18432236]     Ответить | Цитировать Сообщить модератору
 Re: динамическое представление  [new]
Vitalic_Hekto
Member

Откуда:
Сообщений: 60
Glory
Vitalic_Hekto
я правильно понимаю что это делается средствами VBA ?

Нет
Это делается переключением из режима дизайнера запросов в режим ручного ввода исполняемого кода

прошу, дайте более развернутый ответ. Хочу разобраться в этом вопросе окончательно :)
17 ноя 15, 23:06    [18432472]     Ответить | Цитировать Сообщить модератору
 Re: динамическое представление  [new]
Vitalic_Hekto
Member

Откуда:
Сообщений: 60
Vitalic_Hekto,

вроде вот это помогло https://blogs.office.com/2010/06/07/running-a-sql-stored-procedure-from-excel-no-vba/ :)
17 ноя 15, 23:13    [18432501]     Ответить | Цитировать Сообщить модератору
 Re: динамическое представление  [new]
Glory
Member

Откуда:
Сообщений: 104760
http://www.codeproject.com/Tips/859449/Executing-A-Stored-Procedure-From-Excel-Sheet
17 ноя 15, 23:34    [18432573]     Ответить | Цитировать Сообщить модератору
 Re: динамическое представление  [new]
Vitalic_Hekto
Member

Откуда:
Сообщений: 60
Glory,

Спасибо спасибо) по моей ссылке даже проще получилось.
17 ноя 15, 23:41    [18432614]     Ответить | Цитировать Сообщить модератору
 Re: динамическое представление  [new]
Glory
Member

Откуда:
Сообщений: 104760
Vitalic_Hekto
о моей ссылке даже проще получилось.

по вашей ссылке возможен запуск процедуры без параметров или с постоянными параметрами
17 ноя 15, 23:43    [18432621]     Ответить | Цитировать Сообщить модератору
 Re: динамическое представление  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Vitalic_Hekto,
Если Вы хотите параметризовать представление, напишите inline функцию и используйте ее в cross apply запросе.

use [tempdb]
go

create table dbo.from1 (f1 char, f2 int) -- исходные данные
insert dbo.from1 values ('a',1),('b',5)
go

create function dbo.f (@filter int) -- inline функция
returns table
as
return
	select f1, f2 from dbo.from1 where f2 = @filter
go
-- вместо динамического IN запроса
declare @t table (p1 int)
insert @t values (1),(2)

select f1, f2
from @t t
cross apply dbo.f(t.p1)
18 ноя 15, 11:05    [18434061]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить