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

Откуда:
Сообщений: 23
Здравствуйте!

SQL Server 2008R2
Уровень совместимости 100.

+ Есть модельная БД следующей структуры

CREATE TABLE dbo.SourceTable
(
     REC_ID varbinary(8) NOT NULL
    ,sFIELD varchar(10) NULL
    ,iFIELD int
    ,vFIELD varbinary(8)
    ,CONSTRAINT PK_SourceTable_REC_ID PRIMARY KEY CLUSTERED (REC_ID)
);

CREATE TABLE dbo.ScriptTable
(
     REC_ID varbinary(8) NOT NULL
    ,sQUERY varchar(1000) NULL
    ,iFIELD int
    ,CONSTRAINT PK_ScriptTable_REC_ID PRIMARY KEY CLUSTERED (REC_ID)
);

CREATE TABLE dbo.DataTableOne
(
     REC_ID varbinary(8) NOT NULL
    ,sSomeDataName varchar(10) NULL
    ,iSomeDataCode int
    ,CONSTRAINT PK_DataTableOne_REC_ID PRIMARY KEY CLUSTERED (REC_ID)
);

CREATE TABLE dbo.DataTableTwo
(
     REC_ID varbinary(8) NOT NULL
    ,sVALUE varchar(100) NULL
    ,iCODE int
    ,CONSTRAINT PK_DataTableTwo_REC_ID PRIMARY KEY CLUSTERED (REC_ID)
);



Где:
SourceTable - таблица с основными данными;
ScriptTable - таблица с текстами запросов;
DataTableOne и DataTableTwo - справочники.

+ Наполнение данными

INSERT INTO SOURCETABLE(REC_ID, sFIELD,iFIELD,vFIELD)
VALUES
 (0x800000000001,'Значение1',1,0x800000000001)
,(0x800000000002,'Значение2',1,0x800000000001)
,(0x800000000003,'Значение3',2,0x800000000001)
,(0x800000000004,'Значение4',1,0x800000000002)
,(0x800000000005,'Значение5',2,0x800000000002)
,(0x800000000006,'Значение6',1,0x800000000003)
,(0x800000000007,'Значение7',2,0x800000000002)
,(0x800000000008,'Значение8',1,0x800000000004)
,(0x800000000009,'Значение9',2,0x800000000003)
,(0x800000000010,'Значение10',1,0x800000000002);

INSERT INTO SCRIPTTABLE(REC_ID, sQUERY, iFIELD)
VALUES
 (0x800000000001,'SELECT @VALUE = COALESCE(iSomeDataCode,'') FROM DataTableOne WHERE REC_ID = ',1)
,(0x800000000002,'SELECT @VALUE = COALESCE(sVALUE,'') FROM DataTableTwo WHERE REC_ID = ',2);

INSERT INTO DataTableOne(REC_ID, iSomeDataCode, sSomeDataName)
VALUES
 (0x800000000001,1,'Вилки')
,(0x800000000002,2,'Ножи')
,(0x800000000003,3,'Ложки')
,(0x800000000004,4,'Палки')
,(0x800000000005,5,'Копалки')
,(0x800000000006,6,'Мигалки')
,(0x800000000007,7,'ИтемНейм1')
,(0x800000000008,8,'ИтемНейм2')
,(0x800000000009,9,'ИтемНейм3');

INSERT INTO DataTableTwo(REC_ID, sVALUE, iCODE)
VALUES
 (0x800000000001,'001=Красный',1)
,(0x800000000002,'002=Оранжевый',2)
,(0x800000000003,'003=Желтый',3)
,(0x800000000004,'004=Зеленый',4)
,(0x800000000005,'005=Голубой',5)
,(0x800000000006,'006=Синий',6)
,(0x800000000007,'007=Фиолетовый',7);



Логика взаимодействия:
Поле iFIELD таблицы SourceTable сообщает о таблице в которой хранятся данные по ссылке SourceTable.vFIELD = (DataTableOne)DataTableTwo.REC_ID.
Поле SCRIPTTABLE.iFIELD таблицы соответствует полю SourceTable.iFIELD.
Таблица SCRIPTTABLE содержит текст запроса, который вернет необходимое значение из DataTableOne или DataTableTwo.

+ Есть табличная функция

CREATE FUNCTION dbo.GetData(@TBLCODE INT, @REC_ID VARBINARY(8))  
RETURNS @retTABLE TABLE   
(  
    RETVAL VARCHAR NULL
)   
AS  
BEGIN  
	DECLARE
	    @QUERY NVARCHAR(1000),
	    @PARAM NVARCHAR(100),
	    @VALUE VARCHAR (1000);
	    
	SET @PARAM = '@VALUE VARCHAR(100) OUTPUT';
	SELECT @QUERY = COALESCE(sQUERY+CONVERT(VARCHAR(MAX),@PARAM,1),'') FROM SCRIPTTABLE WHERE iFIELD = @TBLCODE;
	
	IF @QUERY <> ''
	BEGIN
		EXECUTE sp_executesql @QUERY, @PARAM, @VALUE OUTPUT;
	END
INSERT INTO @retTABLE(RETVAL) VALUES(@VALUE)
RETURN  
END;



Подразумевается использование в виде:
SELECT 
	SOURCETABLE.sFIELD
       ,DICT_DATA.RETVAL
FROM 
	SOURCETABLE OUTER APPLY 
	dbo.GetData(SOURCETABLE.iFIELD,SOURCETABLE.vFIELD)) AS DICT_DATA;


В данный момент это совсем не работает, ибо внутри табличной функции нельзя запустить хранимую процедуру.
Прошу подсказать как можно выкрутиться из данной ситуации.
25 ноя 17, 17:00    [20983085]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос в табличной функции  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36980
Выкрутиться просто. Надо забыть об универсальных функциях с динамикой. Ну или сменить СУБД.

Oomel
Таблица SCRIPTTABLE содержит текст запроса, который вернет необходимое значение из DataTableOne или DataTableTwo.
А, да, для сохранения текста здапроса на стороне сервера придумали разные объекты -- представления, процедуры, функции. В таблицу пихать текст запросов не надо.

Сообщение было отредактировано: 25 ноя 17, 17:29
25 ноя 17, 17:27    [20983124]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос в табличной функции  [new]
Oomel
Member

Откуда:
Сообщений: 23
Гавриленко Сергей Алексеевич
А, да, для сохранения текста здапроса на стороне сервера придумали разные объекты -- представления, процедуры, функции. В таблицу пихать текст запросов не надо.


Это конечно да, но такой подход затруднителен в случаях, когда в БД > 300 объектов для которых нужно будет описать представления или функцию.
Суть использования динамики как раз заключается в том, что добавить в таблицу новую строку или изменить существующую намного проще, чем менять объект БД.

Плюс код от такой кучи, предположим, представлений распухнет чуть больше чем в действительности бы хотелось.

Без необходимости такой небезопасный, плюс ко всему, способ не был бы выбран.

Поэтому вопрос остается актуальным: есть ли возможность динамически выбирать таблицу при выполнении запроса, основываясь на значении поля(SourceTable.iFIELD) в данном случае.
Желательно не используя курсор т.к в продакшине у таблицы, чьим упрощенным вариантом является SourceTable, миллиарды записей.
25 ноя 17, 17:47    [20983147]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос в табличной функции  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36980
Oomel
Это конечно да, но такой подход затруднителен в случаях, когда в БД > 300 объектов для которых нужно будет описать представления или функцию.
А для 299 объектов типа проще было бы?

Oomel
Суть использования динамики как раз заключается в том, что добавить в таблицу новую строку или изменить существующую намного проще, чем менять объект БД.
"Проще"? Не надо делать приседание и "ку" говорить перед изменением объекта? Или в чем простота?

Oomel
Плюс код от такой кучи, предположим, представлений распухнет чуть больше чем в действительности бы хотелось.
Огласите допустимую для вас "пухлость" кода тогда.

Oomel
Без необходимости такой небезопасный, плюс ко всему, способ не был бы выбран.
Галактика опасносте?... Но.. В чем опасность-то?

Oomel
Поэтому вопрос остается актуальным: есть ли возможность динамически выбирать таблицу при выполнении запроса, основываясь на значении поля(SourceTable.iFIELD) в данном случае.
Уже 15 лет как в FAQ описан способ.

Oomel
Желательно не используя курсор т.к в продакшине у таблицы, чьим упрощенным вариантом является SourceTable, миллиарды записей.
Тогда у вас архитектор должен быть, почему вы ему все эти вопросы не задаете?

Сообщение было отредактировано: 25 ноя 17, 17:59
25 ноя 17, 17:58    [20983171]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос в табличной функции  [new]
Oomel
Member

Откуда:
Сообщений: 23
По пунктам:
1. Не проще. Сложность заключается в возможной необходимости дорабатывать такие объекты в случае изменения структуры БД.
Вся БД входит в состав определенного продукта, который разрабатывается не нами. Любое вмешательство в структуру БД может очень сильно затруднить дальнейшее сопровождение.
2. Так получилось, что на данный момент только у меня присутствует некоторый навык для разработки на SQL.
Если я слишком усложню текущую доработку, то могут возникнуть проблемы по ее сопровождению у других специалистов.
3. Т.к. в основном код разрабатывается не на SQL, то хотелось бы ограничиваться небольшими конструкциями в пределах 500 строк.
4. К данной таблице имеют доступ пользователи. Там можно и drop table написать.
5. Собственно, sp_executesql и хотелось бы использовать. Как его использовать в текущем SELECT я не знаю, а в табличной функции он не работает.
6. Архитектор - это относительно крупный разработчик, который не будет менять структуру БД своего продукта для одной компании.
25 ноя 17, 18:25    [20983214]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос в табличной функции  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31364
Oomel
Суть использования динамики как раз заключается в том, что добавить в таблицу новую строку или изменить существующую намного проще, чем менять объект БД.

Oomel
Это конечно да, но такой подход затруднителен в случаях, когда в БД > 300 объектов для которых нужно будет описать представления или функцию.
Суть использования динамики как раз заключается в том, что добавить в таблицу новую строку или изменить существующую намного проще, чем менять объект БД.

Плюс код от такой кучи, предположим, представлений распухнет чуть больше чем в действительности бы хотелось.

Без необходимости такой небезопасный, плюс ко всему, способ не был бы выбран.
Это всё личные пристрастия.

Объективно добавить в таблицу новую строку или создать вьюху есть выполнение одной команды T-SQL
Куча представлений - это одна запись в таблице на представление, ровно как запись в вашей таблице SCRIPTTABLE. Только лучше сделано. Распухнет это точно так же, как ваша таблица SCRIPTTABLE, не больше.
Ой, да, у вас 300 обхектов!!! Ужвс!!! В типичной торговой системе 10 тыщ объектов, и именно это делает работу с ней программистов простой и безглючной. Думаете, если типичную систему засунуть в одну талицу, то всё будет в ажуре? Нет таблиц нет глюков?

Понимаете, ключевое тут то, что умные люди уже написали вот это всё - SCRIPTTABLE, QUERY, iFIELD, TBLCODE, только называется это всё немного по другому.

Они тщательно продумали модель данных, всё это отлажено и проверено десятилетиями эксплуатации, сделан быстрый надёжный движок для обработки (Database Engine), и даже есть специальный язык (T-SQL), что бы можно было всё делать не только мышечкой в интерфейсах, но и нормальным программированием, с использованием сорс-контролов и разделением работ. Делали всё это лучшие из лучших, тысячи специалистов десятки лет.

А вы хотите сделать лучше, и силами пяти (да хоть 50) молодых студентов (да пусть вы даже переманили 50 лучших спецов из микрософта и оракла)? Притом для построения одной торговой системы (хорошо, для замены гугла)?

Не занимайтесь глупостями, используйте то, что есть.
25 ноя 17, 18:29    [20983219]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос в табличной функции  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31364
Oomel
По пунктам:
1. Не проще. Сложность заключается в возможной необходимости дорабатывать такие объекты в случае изменения структуры БД.
Вся БД входит в состав определенного продукта, который разрабатывается не нами. Любое вмешательство в структуру БД может очень сильно затруднить дальнейшее сопровождение.
2. Так получилось, что на данный момент только у меня присутствует некоторый навык для разработки на SQL.
Если я слишком усложню текущую доработку, то могут возникнуть проблемы по ее сопровождению у других специалистов.
3. Т.к. в основном код разрабатывается не на SQL, то хотелось бы ограничиваться небольшими конструкциями в пределах 500 строк.
4. К данной таблице имеют доступ пользователи. Там можно и drop table написать.
5. Собственно, sp_executesql и хотелось бы использовать. Как его использовать в текущем SELECT я не знаю, а в табличной функции он не работает.
6. Архитектор - это относительно крупный разработчик, который не будет менять структуру БД своего продукта для одной компании.
1. Сделайте отдельную базу для вашей надстройки над чужим продуктом.
Объекты из чужого продукта пропишите синонимами.

2. Это непрограммисты будут в ваши SCRIPTTABLE писать запросы? Тогда какая разница? Или они будут мишкой набрасывать запросы в неком вашем приложении? Так и генерите запросы уже оттуда, сохраняйте как вьюхи.

3. Ого. "небольшой код" в 500 строк :-) Вам нужно хорошего SQL программера, что бы писал код не больше 50 строк :-)

4. см. п. 2

5. Этого делать нельзя. Точнее, можно написать extended или CLR функцию.
25 ноя 17, 18:40    [20983236]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос в табличной функции  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36980
Oomel
Собственно, sp_executesql и хотелось бы использовать. Как его использовать в текущем SELECT я не знаю, а в табличной функции он не работает
Никак. Изучите матчасть сначала, а потом генерируйте идеи.
25 ноя 17, 18:41    [20983239]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос в табличной функции  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
Oomel
По пунктам:
1. Не проще. Сложность заключается в возможной необходимости дорабатывать такие объекты в случае изменения структуры БД.
Вся БД входит в состав определенного продукта, который разрабатывается не нами. Любое вмешательство в структуру БД может очень сильно затруднить дальнейшее сопровождение.
2. Так получилось, что на данный момент только у меня присутствует некоторый навык для разработки на SQL.
Если я слишком усложню текущую доработку, то могут возникнуть проблемы по ее сопровождению у других специалистов.
3. Т.к. в основном код разрабатывается не на SQL, то хотелось бы ограничиваться небольшими конструкциями в пределах 500 строк.
4. К данной таблице имеют доступ пользователи. Там можно и drop table написать.
5. Собственно, sp_executesql и хотелось бы использовать. Как его использовать в текущем SELECT я не знаю, а в табличной функции он не работает.
6. Архитектор - это относительно крупный разработчик, который не будет менять структуру БД своего продукта для одной компании.

1). Если у тебя чужая БД, то и приложение у тебя не своё. Делай слой данных - прокладку между "чужим" и пользователем, и будет тебе счастье. Там где нельзя "доработать напильником" нужно "строить лучший новый мир"
2). Ну так пишите свою динамику там, где у вас достаточно "сильных программистов". Дельфи там, C#. Не зная броду не суйся в воду. Могу рассказать метод. Делается таблица нужной или даже универсальной (свят-свят) структуры, с полем для идентификации сессии пользователя (например HWND). В коде приложения она заполняется нужными данными с указанием HWND, а потом эти данные используются в запросах. Только чистить не забывать.
3). CLR
4). Там можно и Drop database master написать, если что.
5). Табличная функция определена своей структурой. Не получится один раз такие столбцы, другой раз другие. Можете использовать именованныее (глобальные) временные таблицы. Например вызываете процедуру с параметром "имя временной таблицы", на выходе получаете временную таблицу с нужными данными.
28 ноя 17, 09:32    [20987476]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос в табличной функции  [new]
aleks222
Guest
Шыфл
[Например вызываете процедуру с параметром "имя временной таблицы", на выходе получаете временную таблицу с нужными данными.


С этого места - помедленнее!
Я записываю!

Примерчик бы.

ЗЫ. Ну создать #t и заполнить ее в процедуре - это я умею.

Но шоб создать #t и даже ##t внутри процедуры и вернуть - это тока джедаю 80-level-а по силам.
28 ноя 17, 09:47    [20987507]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос в табличной функции  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
aleks222,

да, область видимости доступна только магистру :)
28 ноя 17, 10:07    [20987548]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос в табличной функции  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
автор
Таблица SCRIPTTABLE содержит текст запроса, который вернет необходимое значение из DataTableOne или DataTableTwo.


Братан, выдохни! Или черкани личкой телефон дилера!


Если серьезно, то "представление" и есть "текст запроса" который "храниться в таблице". Только добрые люди из майкрософт уже для тебя сделали всю обвязку. Хочешь с параметрами? Не вопрос, пиши инлайн функции. Это те же самые "представления" вид с боку.

Накой черт городить свою нетленку, когда уже все сделано для тебя 9 лет назад?
28 ноя 17, 10:32    [20987609]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос в табличной функции  [new]
iap
Member

Откуда: Москва
Сообщений: 46981
Cammomile
все сделано для тебя 9 лет назад?
А что сделано 9 лет назад?
28 ноя 17, 10:43    [20987639]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос в табличной функции  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
aleks222
Но шоб создать #t и даже ##t внутри процедуры и вернуть - это тока джедаю 80-level-а по силам.


Я наверное не понял посыла. Но ведь это же довольно тривиально, уж для ## точно. Ежели она у нас как входной параметр для процедуры, то нам, по большому счету, и возвращать ничего не надо. У нас уже есть эти данные...
28 ноя 17, 10:58    [20987681]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос в табличной функции  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
iap, емнип в 2008 сервере добавили инлайн функции, которые мы можем использовать как параметризированные представления, и они как раз и есть "текст запроса" который хочет хранить аффтар.
28 ноя 17, 10:59    [20987687]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос в табличной функции  [new]
aleks222
Guest
Cammomile
iap, емнип в 2008 сервере добавили инлайн функции, которые мы можем использовать как параметризированные представления, и они как раз и есть "текст запроса" который хочет хранить аффтар.


КО сообщает: inline-функции добавили ишо в MS SQL 2000.
28 ноя 17, 11:14    [20987730]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос в табличной функции  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Ну и славно. Алекс, ответь на мой вопрос выше.
28 ноя 17, 11:15    [20987732]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос в табличной функции  [new]
Владислав Колосов
Member

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

Не так. Храните запросы на сервере, запрашивать должен клиент. Т.е. вам нужна технологическая прослойка типа сервера приложений. На SQL это городить не надо. Конструированием и выполнением запросов пусть занимается прослойка.
28 ноя 17, 11:38    [20987818]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос в табличной функции  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
Cammomile
aleks222
Но шоб создать #t и даже ##t внутри процедуры и вернуть - это тока джедаю 80-level-а по силам.

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


Вот-вот, и я говорю - никакой химии
+ ктобы что не говорил, а так оно работает везде

create procedure dbo.test (@name varchar(50))
as
declare @s nvarchar(max)
set @s='select top 10 * into ' + @name + ' from businessresult'
exec sp_executesql @s
go

exec dbo.test '##trampampa'

select * from ##trampampa
drop table ##trampampa
drop procedure dbo.test
28 ноя 17, 14:43    [20988547]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос в табличной функции  [new]
Cammomile
Member

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

Пардону просим, накосячил в прошлом посте.

CREATE TABLE  dbo.Queries(ID int, Qtext nvarchar(max)) 

INSERT INTO  dbo.Queries SELECT 1, 'SELECT [Text] = ''Hello SQL.ru!'' FOR XML PATH(''Data'') '  
INSERT INTO  dbo.Queries SELECT 2, 'SELECT  TOP 5 object_id, name  FROM sys.all_columns FOR XML PATH(''Data'') '  
 
 
GO 
CREATE  PROC dbo.Proc_1 
  @TempTableName nvarchar(600)  
, @QueryID int 
AS
  DECLARE @Query nvarchar(max) = (SELECT Qtext FROM  dbo.Queries WHERE ID = @QueryID )
  DECLARE @SQL nvarchar(max) 
 

  SET @SQL = 'CREATE TABLE ' + @TempTableName  + ' (TabelData xml)  
  DECLARE @XML XML = (' + @Query  +' ) INSERT INTO  '   + @TempTableName + '  SELECT @XML ' 
 
  EXECUTE (@SQL) 
GO 

CREATE PROC dbo.Proc_2 
 @TempTableName nvarchar(600)   
 
AS 
  DECLARE @SQL nvarchar(max) = 'SELECT *  FROM  ' + @TempTableName 
  EXEC (@SQL) 

  SET @SQL = 'DROP TABLE ' + @TempTableName 
  EXEC (@SQL) 

GO 
  EXEC  dbo.Proc_1   '##SomeGlobalTable' , 1
  EXEC  dbo.Proc_2   '##SomeGlobalTable'
  
  EXEC  dbo.Proc_1   '##SomeGlobalTable' , 2
  EXEC  dbo.Proc_2   '##SomeGlobalTable'
 

GO
  DROP PROC  dbo.Proc_1 
  DROP PROC  dbo.Proc_2 
  DROP TABLE dbo.Queries



 
28 ноя 17, 14:52    [20988571]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос в табличной функции  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Шыфл,

главное случайно паралельно не запускать?
28 ноя 17, 14:52    [20988573]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос в табличной функции  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Тапачка, кончай словоблудие. Ты говорил что нельзя, тебе показали, что можно. Если ты имел в виду не это, а что-то другое, раскрой свою мысль.

Тебе привели рабочее доказательство концепта, а ты съезжаешь на частности.
28 ноя 17, 14:54    [20988583]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос в табличной функции  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
*вангую счаз начнутся маневры, что они имели в виду "передачу данных между сессиями" ...
28 ноя 17, 14:56    [20988585]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос в табличной функции  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
барашка, а чего это решение? как сделать селект через поход к проктологу в строгой очередности? натуторил....
28 ноя 17, 15:12    [20988624]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос в табличной функции  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
aleks222

Но шоб создать #t и даже ##t внутри процедуры и вернуть - это тока джедаю 80-level-а по силам.

TaPaK
aleks222,да, область видимости доступна только магистру :)

Алекс утверждает что создать ## внутри процедуры и прокинуть наверх это очень крутой навык.
Ты с ним соглашаешься.
Тебе показывают пример, что это навык уровня "прочитал про виды временных таблиц".

Ты включаешь какие-то неясные манёвры. У тебя по делу есть что сказать?
28 ноя 17, 15:16    [20988644]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить