|
|
|
Вставка результата функции (table-valued) в таблицу
|
|||
|---|---|---|---|
|
#18+
Есть UDF. Такого вида: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Есть таблица: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Мне нужно в таблицу-переменную сделать выборку с использованием вышеуказанной функции. По смыслу это выглядело бы так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Естественно, так сделать не получается, "Insert Error: Column name or number of supplied values does not match table definition". Если написать Код: plaintext 1. 2. Ошибка будет такой: "The select list for the INSERT statement contains fewer items than the insert list. The number of SELECT values must match the number of INSERT columns" А как сделать по-человечески? Как объяснить, что у меня функция возвращает выборку из трех колонок, которую надо запихнуть в таблицу из трех же колонок?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2002, 11:14:58 |
|
||
|
Вставка результата функции (table-valued) в таблицу
|
|||
|---|---|---|---|
|
#18+
Что-то не пойму - раз функция возвращает набор разве можно ее использовать так select dbo.f1(c1, c3, c6) from t1 ? IMHO только так select * from dbo.f1(....) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2002, 11:33:29 |
|
||
|
Вставка результата функции (table-valued) в таблицу
|
|||
|---|---|---|---|
|
#18+
В BOL-же всё написано... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2002, 11:33:48 |
|
||
|
Вставка результата функции (table-valued) в таблицу
|
|||
|---|---|---|---|
|
#18+
2 Glory: Вот именно, что нельзя для table-valued функций :-(( Это нерабочий пример, написанный только для того, чтобы объяснить, что мне нужно. 2 alexeyvg: Да ежу понятно. Вопрос в том, что мне не константы нужны в качестве параметров функции, а значения полей в таблице. Фиг их укажешь после from. В этом-то и проблема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2002, 11:52:31 |
|
||
|
Вставка результата функции (table-valued) в таблицу
|
|||
|---|---|---|---|
|
#18+
Если задача ставится сгенерировать для каждой записи таблицы дополнительный набор записей то IMHO кроме как через курсор такую проблему не решить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2002, 12:04:07 |
|
||
|
Вставка результата функции (table-valued) в таблицу
|
|||
|---|---|---|---|
|
#18+
Я жутко извиняюсь (ой), так тоже не работает: insert into @t2 (r1, r2, r3) select top 1 * from (select dbo.f1(c1, c3, c6) from t1) as ququ ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2002, 12:08:54 |
|
||
|
Вставка результата функции (table-valued) в таблицу
|
|||
|---|---|---|---|
|
#18+
Да, задача стоит именно так: для каждой записи в таблице провести некоторую обработку и результаты сложить в другую таблицу (или вывести во view, не суть важно). Пытаюсь избежать курсора, но пока безуспешно :-( select top 1 * from (select dbo.f1(c1, c3, c6) from t1) as ququ тоже не работает: "No column was specified for column 1 of 'ququ'" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2002, 12:28:27 |
|
||
|
Вставка результата функции (table-valued) в таблицу
|
|||
|---|---|---|---|
|
#18+
Уважаемые, а перед тем, как инсерты делать вы просто голые селекты проверяли? На ошибки смотрели? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2002, 12:51:43 |
|
||
|
Вставка результата функции (table-valued) в таблицу
|
|||
|---|---|---|---|
|
#18+
Жутко извиняюсь ещё раз , так тоже плохо? insert into @t2 select * from (select top 1 dbo.f1(c1, c3, c6) from t1) as ququ ??? ВАПРОС - ПАЧАМУ ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2002, 12:53:17 |
|
||
|
Вставка результата функции (table-valued) в таблицу
|
|||
|---|---|---|---|
|
#18+
Кстати, если ты и избежишь курсора, то не факт, что будет работать быстрее. Подумай сам - твоя функция для каждой нужной записи должна создать временную таблицу и заполнить ее, после чего это должно быть вставлено в общий буфер. IMHO курсор+SP будет исполняться по крайней мере не медленнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2002, 13:00:16 |
|
||
|
Вставка результата функции (table-valued) в таблицу
|
|||
|---|---|---|---|
|
#18+
атвет: патамучта вот такая хрень select * from (select 123) as ququ хоть с top, хоть без него, не работает. Нельзя сделать напрямую select из select'а. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2002, 13:00:28 |
|
||
|
Вставка результата функции (table-valued) в таблицу
|
|||
|---|---|---|---|
|
#18+
select ququ.a from (select 123 as a) as ququ если на то пошло :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2002, 13:03:20 |
|
||
|
Вставка результата функции (table-valued) в таблицу
|
|||
|---|---|---|---|
|
#18+
2 VVG_: Да, возможно и так. Но у меня стоит вопрос не столько скорости, сколько удобства использования. Впрочем, не исключено, что я и приду к SP+cursor. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2002, 13:06:18 |
|
||
|
Вставка результата функции (table-valued) в таблицу
|
|||
|---|---|---|---|
|
#18+
Что касается оптимизации: Я бы попытался выделить однотипные операции и на каждую из групп написал бы обработку "в один запрос". Не может же быть, что каждую запись нужно обрабатывать сваим уникальным образом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2002, 13:09:39 |
|
||
|
Вставка результата функции (table-valued) в таблицу
|
|||
|---|---|---|---|
|
#18+
Уломали :-)) Такая вещь работает: select ququ.a from (select 123 as a) as ququ Но с функцией все равно не проходит, потому что в разделе select_list могут быть указаны только scalar-valued функции, насколько я понимаю. Table-valued используются во from разделе. Поправьте меня, если я ошибаюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2002, 13:21:44 |
|
||
|
Вставка результата функции (table-valued) в таблицу
|
|||
|---|---|---|---|
|
#18+
а может сделать 3 scalar-valued функции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2002, 13:35:27 |
|
||
|
Вставка результата функции (table-valued) в таблицу
|
|||
|---|---|---|---|
|
#18+
Ну это возможно только если table-valued всегда возвращает ровно одну запись. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2002, 13:38:02 |
|
||
|
Вставка результата функции (table-valued) в таблицу
|
|||
|---|---|---|---|
|
#18+
В принципе, у меня функция действительно возвращает ровно 1 строку, так что теоретически можно. Но! Вот тогда уж точно дико упадет производительность или разбухнет код. Или и то и то ;-) Ладно, видимо, через функцию нормально сделать не получается при моей постановке задачи. Всем большое спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2002, 13:57:18 |
|
||
|
Вставка результата функции (table-valued) в таблицу
|
|||
|---|---|---|---|
|
#18+
ха! раз одну запись, тогда: insert into @t2 select (select r1 from dbo.f1(c1, c3, c6)) as r1, (select r2 from dbo.f1(c1, c3, c6)) as r2, (select r3 from dbo.f1(c1, c3, c6)) as r3 from t1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2002, 14:59:22 |
|
||
|
Вставка результата функции (table-valued) в таблицу
|
|||
|---|---|---|---|
|
#18+
Ну и нафига мне выполнение функции 3 раза вместо одного?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2002, 15:03:12 |
|
||
|
Вставка результата функции (table-valued) в таблицу
|
|||
|---|---|---|---|
|
#18+
Граждане, развейте мои сомнения У вас что работает данный код ? select t1.*, (select top 1 r1 from dbo.f1(t1.c1, t1.c3, t1.c6)) AS xx from t1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2002, 15:09:49 |
|
||
|
Вставка результата функции (table-valued) в таблицу
|
|||
|---|---|---|---|
|
#18+
Нет, такое работать не будет, ибо функция должна выполниться один раз и ДО join'a, а не во время его. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2002, 15:28:40 |
|
||
|
Вставка результата функции (table-valued) в таблицу
|
|||
|---|---|---|---|
|
#18+
Причем здесь JOIN ? Я пытаюсь использовать выборку из Table-valued функции в качестве вычисляемого столбца ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2002, 15:46:05 |
|
||
|
Вставка результата функции (table-valued) в таблицу
|
|||
|---|---|---|---|
|
#18+
Ведь такой запрос работает Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2002, 15:47:29 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32035106&tid=1822008]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
| others: | 195ms |
| total: | 338ms |

| 0 / 0 |
