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

Откуда:
Сообщений: 590
Я создал функцию возвращающую табличное значение. В возвращаемую таблицу данные заносятся в определенном порядке, который нельзя изменять. Столкнулся с такой проблемой, что при selecte данных из этой функции, строки возвращаются не в том порядке в котором занесены, в разнобой. Таблица состоит из одного столбца, отсортировать по которому нельзя, а данные нужны строго в той последовательности в которой заносились. Как побороть эту проблему?

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

Кто-нибудь сталкивался с подобной проблемой?

Требование чтобы это была именно функция возвращающая табличное значение и данные выводились в строго определенной последовательности.
29 окт 15, 10:00    [18341626]     Ответить | Цитировать Сообщить модератору
 Re: Табличные функции и процедуры  [new]
Glory
Member

Откуда:
Сообщений: 104751
lex452
Как побороть эту проблему?

Использовать ORDER BY в своих запросах

lex452
Кто-нибудь сталкивался с подобной проблемой?

"Проблема" отсутствия в вашем запросе ORDER BY решается добавлением ORDER BY в текст запроса
29 окт 15, 10:04    [18341655]     Ответить | Цитировать Сообщить модератору
 Re: Табличные функции и процедуры  [new]
AHAPXuCT
Member

Откуда:
Сообщений: 44
lex452
Требование ... данные выводились в строго определенной последовательности.

А нету никакой строго определённой последовательности,
кроме той, которую вы сами определяете, задавая структуру таблицы.
Вам что, так трудно добавить в таблицу столбец "Дата ввода записи" или автоинкремент "id записи" (и по этому столбцу сортировать) ?
29 окт 15, 10:06    [18341675]     Ответить | Цитировать Сообщить модератору
 Re: Табличные функции и процедуры  [new]
lex452
Member

Откуда:
Сообщений: 590
AHAPXuCT
lex452
Требование ... данные выводились в строго определенной последовательности.

А нету никакой строго определённой последовательности,
кроме той, которую вы сами определяете, задавая структуру таблицы.
Вам что, так трудно добавить в таблицу столбец "Дата ввода записи" или автоинкремент "id записи" (и по этому столбцу сортировать) ?

Мне необходимо чтобы таблица вернула 1 столбец. Есть стороннее ПО, которое считывает результат и формирует отчет, и если я добавлю ID то это будут лишние данные которых быть не должно
29 окт 15, 10:09    [18341694]     Ответить | Цитировать Сообщить модератору
 Re: Табличные функции и процедуры  [new]
lex452
Member

Откуда:
Сообщений: 590
Glory
lex452
Как побороть эту проблему?

Использовать ORDER BY в своих запросах

lex452
Кто-нибудь сталкивался с подобной проблемой?

"Проблема" отсутствия в вашем запросе ORDER BY решается добавлением ORDER BY в текст запроса

я же написал "Таблица состоит из одного столбца, сортировать по которому нельзя"
29 окт 15, 10:09    [18341701]     Ответить | Цитировать Сообщить модератору
 Re: Табличные функции и процедуры  [new]
Glory
Member

Откуда:
Сообщений: 104751
lex452
Мне необходимо чтобы таблица вернула 1 столбец.

Таблица не может ничего возвращать.
Возвращает запрос к таблице. И в этом запросе _вы должны_ указать ORDER BY, если _вам нужен_ какой-то порядок
29 окт 15, 10:10    [18341704]     Ответить | Цитировать Сообщить модератору
 Re: Табличные функции и процедуры  [new]
AHAPXuCT
Member

Откуда:
Сообщений: 44
lex452
Мне необходимо чтобы таблица вернула 1 столбец.

Открою вам страшную тайну.
Таблица может вернуть 1 столбец,
даже если она состоит из двух (и более столбцов).
29 окт 15, 10:11    [18341708]     Ответить | Цитировать Сообщить модератору
 Re: Табличные функции и процедуры  [new]
Glory
Member

Откуда:
Сообщений: 104751
lex452
Glory
пропущено...

Использовать ORDER BY в своих запросах

пропущено...

"Проблема" отсутствия в вашем запросе ORDER BY решается добавлением ORDER BY в текст запроса

я же написал "Таблица состоит из одного столбца, сортировать по которому нельзя"

Круто, что вы написали. Только серверу ваше "я написал" до лампочки.
29 окт 15, 10:11    [18341714]     Ответить | Цитировать Сообщить модератору
 Re: Табличные функции и процедуры  [new]
lex452
Member

Откуда:
Сообщений: 590
Glory
lex452
Мне необходимо чтобы таблица вернула 1 столбец.

Таблица не может ничего возвращать.
Возвращает запрос к таблице. И в этом запросе _вы должны_ указать ORDER BY, если _вам нужен_ какой-то порядок


Мне нужен тот порядок в котором я занес данные в таблицу, и он не поддается сортировке.
29 окт 15, 10:12    [18341719]     Ответить | Цитировать Сообщить модератору
 Re: Табличные функции и процедуры  [new]
Glory
Member

Откуда:
Сообщений: 104751
lex452
Glory
пропущено...

Таблица не может ничего возвращать.
Возвращает запрос к таблице. И в этом запросе _вы должны_ указать ORDER BY, если _вам нужен_ какой-то порядок


Мне нужен тот порядок в котором я занес данные в таблицу, и он не поддается сортировке.

Ну еще раз сто скажите "халва"
29 окт 15, 10:13    [18341727]     Ответить | Цитировать Сообщить модератору
 Re: Табличные функции и процедуры  [new]
lex452
Member

Откуда:
Сообщений: 590
Glory
lex452
пропущено...

я же написал "Таблица состоит из одного столбца, сортировать по которому нельзя"

Круто, что вы написали. Только серверу ваше "я написал" до лампочки.

То есть не получится никак без сортировки?
И кстати какие процедуры можно использовать внутри функции возвращающей табличное значение?
29 окт 15, 10:14    [18341729]     Ответить | Цитировать Сообщить модератору
 Re: Табличные функции и процедуры  [new]
lex452
Member

Откуда:
Сообщений: 590
AHAPXuCT
lex452
Мне необходимо чтобы таблица вернула 1 столбец.

Открою вам страшную тайну.
Таблица может вернуть 1 столбец,
даже если она состоит из двух (и более столбцов).


Стороннее ПО делает select * from tfunction(), поэтому нет возможности выбрать всего 1 столбец
29 окт 15, 10:15    [18341744]     Ответить | Цитировать Сообщить модератору
 Re: Табличные функции и процедуры  [new]
Glory
Member

Откуда:
Сообщений: 104751
lex452
То есть не получится никак без сортировки?

Сколько раз вам об этом еще сказать

lex452
И кстати какие процедуры можно использовать внутри функции возвращающей табличное значение?

Расширенные. Об этом в хелпе написано. Вы знаете, что это ?
29 окт 15, 10:16    [18341748]     Ответить | Цитировать Сообщить модератору
 Re: Табличные функции и процедуры  [new]
lex452
Member

Откуда:
Сообщений: 590
Glory
lex452
То есть не получится никак без сортировки?

Сколько раз вам об этом еще сказать

lex452
И кстати какие процедуры можно использовать внутри функции возвращающей табличное значение?

Расширенные. Об этом в хелпе написано. Вы знаете, что это ?

нет не знаю, поэтому и спрашиваю
29 окт 15, 10:16    [18341755]     Ответить | Цитировать Сообщить модератору
 Re: Табличные функции и процедуры  [new]
AHAPXuCT
Member

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

Лёха,
(ты - Лёха ?)

Лёха, не горячись,
послухай сюды.

Ты создай таблицу Table1(id_Text Int, My_Text Varchar(100) )
и первый столбец сделай автоинкрементом.

заполняй её сколько хочешь всякой **нёй,
а потом напиши запрос

SELECT My_Text FROM Table1 ORDER BY id_Text


И ты получишь то, к чему ты так стремишься.
29 окт 15, 10:17    [18341756]     Ответить | Цитировать Сообщить модератору
 Re: Табличные функции и процедуры  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
lex452,

Внутри функций нельзя делать ничего, что потенциально может привести к изменению состояния базы.
Процедуры в частности. Даже newid() вызвать нельзя.
29 окт 15, 10:18    [18341764]     Ответить | Цитировать Сообщить модератору
 Re: Табличные функции и процедуры  [new]
lex452
Member

Откуда:
Сообщений: 590
AHAPXuCT
lex452,

Лёха,
(ты - Лёха ?)

Лёха, не горячись,
послухай сюды.

Ты создай таблицу Table1(id_Text Int, My_Text Varchar(100) )
и первый столбец сделай автоинкрементом.

заполняй её сколько хочешь всякой **нёй,
а потом напиши запрос

SELECT My_Text FROM Table1 ORDER BY id_Text


И ты получишь то, к чему ты так стремишься.

Леха. То есть предлагаете сделать функцию возвращающую 2 столбца, а потом функцию возвращающую отсортированные данные из первой функции, но уже с 1 столбцом?
29 окт 15, 10:19    [18341770]     Ответить | Цитировать Сообщить модератору
 Re: Табличные функции и процедуры  [new]
AHAPXuCT
Member

Откуда:
Сообщений: 44
И, заметь, будет ровно 1 столбец в запросе (чего ты так упорно добиваешься)
хотя сама таблица состоит из двух столбцов (не ожидал, да , Лёха ?)
29 окт 15, 10:19    [18341773]     Ответить | Цитировать Сообщить модератору
 Re: Табличные функции и процедуры  [new]
AHAPXuCT
Member

Откуда:
Сообщений: 44
Лёха,
ты про функции не думай пока,
сначала сделай, то что я написал,
а дальше ты уже сам сообразишь ....
29 окт 15, 10:21    [18341782]     Ответить | Цитировать Сообщить модератору
 Re: Табличные функции и процедуры  [new]
lex452
Member

Откуда:
Сообщений: 590
AHAPXuCT
И, заметь, будет ровно 1 столбец в запросе (чего ты так упорно добиваешься)
хотя сама таблица состоит из двух столбцов (не ожидал, да , Лёха ?)

Я так делал, данные возвращаются все равно в разнобой
29 окт 15, 10:22    [18341794]     Ответить | Цитировать Сообщить модератору
 Re: Табличные функции и процедуры  [new]
Glory
Member

Откуда:
Сообщений: 104751
lex452
Я так делал, данные возвращаются все равно в разнобой

Это для вас разнобой.
29 окт 15, 10:23    [18341801]     Ответить | Цитировать Сообщить модератору
 Re: Табличные функции и процедуры  [new]
AHAPXuCT
Member

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

Нет Лёх, данные вернутся, будучи отсортированными, в том порядке, в каком их заносили в эту таблицу.
29 окт 15, 10:23    [18341806]     Ответить | Цитировать Сообщить модератору
 Re: Табличные функции и процедуры  [new]
lex452
Member

Откуда:
Сообщений: 590
AHAPXuCT
Лёха,
ты про функции не думай пока,
сначала сделай, то что я написал,
а дальше ты уже сам сообразишь ....


Внутри функции создавал временную таблицу с нужным столбцом и полем ID с автоинкриментом, потом в результирующую таблицу вставлял данные из временной с сортировкой по столбцу ID, но когда делал select из полученной функции получал их без сортировки.

Что я был удивлен, это ничего не сказать.
29 окт 15, 10:25    [18341817]     Ответить | Цитировать Сообщить модератору
 Re: Табличные функции и процедуры  [new]
lex452
Member

Откуда:
Сообщений: 590
AHAPXuCT
lex452,

Нет Лёх, данные вернутся, будучи отсортированными, в том порядке, в каком их заносили в эту таблицу.



Нет возвращаются не отсортированные, я же говорю что делал так
29 окт 15, 10:26    [18341824]     Ответить | Цитировать Сообщить модератору
 Re: Табличные функции и процедуры  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
lex452
Внутри функции создавал временную таблицу с нужным столбцом и полем ID с автоинкриментом
Нехорошо.
Надо всегда говорить правду.
29 окт 15, 10:29    [18341848]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить