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

Откуда: Белгород
Сообщений: 458
простой пример:
if (exists(select * from sys.objects where name = 'test_1' and [type]='tf')) begin drop function [test_1] end
go
create function [dbo].test_1(@a int, @b int)
returns @spisok table(
	[a] int,
	[b] int
	)
as 
begin
	insert into @spisok	
	select @a, @b

	return
end
go


Получаем результат:

select * from [test_1](2, 1) a


Вопрос! Реально ли использовать функции в Join с другими таблицами, передавая значения полей из этих таблиц в функцию?
28 апр 14, 11:16    [15945119]     Ответить | Цитировать Сообщить модератору
 Re: Работа с функциями  [new]
Glory
Member

Откуда:
Сообщений: 104751
Алексей Кр
Реально ли использовать функции в Join с другими таблицами, передавая значения полей из этих таблиц в функцию?

Реально. Если версия сервера позволяет
28 апр 14, 11:17    [15945128]     Ответить | Цитировать Сообщить модератору
 Re: Работа с функциями  [new]
Алексей Кр
Member

Откуда: Белгород
Сообщений: 458
Можно пример? или ссылку где могу посмотреть
28 апр 14, 11:22    [15945160]     Ответить | Цитировать Сообщить модератору
 Re: Работа с функциями  [new]
dma_caviar
Member

Откуда: https://itproduct.ru
Сообщений: 2361
Glory
Алексей Кр
Реально ли использовать функции в Join с другими таблицами, передавая значения полей из этих таблиц в функцию?

Реально. Если версия сервера позволяет

cross apply вроде еще в древнем 2005м появился
28 апр 14, 11:24    [15945180]     Ответить | Цитировать Сообщить модератору
 Re: Работа с функциями  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Алексей Кр,

лучше так:
IF OBJECT_ID(N'[dbo].[test_1]','IF') IS NOT NULL DROP FUNCTION [dbo].[test_1];
GO
CREATE FUNCTION [dbo].[test_1](@a int, @b int)
RETURNS TABLE
RETURN SELECT [a]=@a,[b]=@b;
GO
28 апр 14, 11:27    [15945201]     Ответить | Цитировать Сообщить модератору
 Re: Работа с функциями  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
dma_caviar
Glory
пропущено...

Реально. Если версия сервера позволяет

cross apply вроде еще в древнем 2005м появился
Боже мой! Какой же я старый!
28 апр 14, 11:28    [15945206]     Ответить | Цитировать Сообщить модератору
 Re: Работа с функциями  [new]
Glory
Member

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

Реально. Если версия сервера позволяет

cross apply вроде еще в древнем 2005м появился

А вы знаете, какая версия сервера у ТС-а ?
28 апр 14, 11:29    [15945216]     Ответить | Цитировать Сообщить модератору
 Re: Работа с функциями  [new]
dma_caviar
Member

Откуда: https://itproduct.ru
Сообщений: 2361
Glory
dma_caviar
пропущено...

cross apply вроде еще в древнем 2005м появился

А вы знаете, какая версия сервера у ТС-а ?

Даю 90% что >= 2005))
28 апр 14, 11:31    [15945230]     Ответить | Цитировать Сообщить модератору
 Re: Работа с функциями  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Glory
dma_caviar
пропущено...

cross apply вроде еще в древнем 2005м появился

А вы знаете, какая версия сервера у ТС-а ?
Не меньше 2000-го.
Раз у него функции работают!
28 апр 14, 11:31    [15945237]     Ответить | Цитировать Сообщить модератору
 Re: Работа с функциями  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
iap
Glory
пропущено...

А вы знаете, какая версия сервера у ТС-а ?
Не меньше 2000-го.
Раз у него функции работают!
Не менее 2005-го.
Раз у него представление sys имеется!
28 апр 14, 11:32    [15945250]     Ответить | Цитировать Сообщить модератору
 Re: Работа с функциями  [new]
dma_caviar
Member

Откуда: https://itproduct.ru
Сообщений: 2361
iap
iap
пропущено...
Не меньше 2000-го.
Раз у него функции работают!
Не менее 2005-го.
Раз у него представление sys имеется!

Кстати точно)
28 апр 14, 11:33    [15945255]     Ответить | Цитировать Сообщить модератору
 Re: Работа с функциями  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
iap
iap
пропущено...
Не меньше 2000-го.
Раз у него функции работают!
Не менее 2005-го.
Раз у него представление sys имеется!
Не представление, а схема, конечно же!
28 апр 14, 11:33    [15945256]     Ответить | Цитировать Сообщить модератору
 Re: Работа с функциями  [new]
Glory
Member

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

А вы знаете, какая версия сервера у ТС-а ?
Не меньше 2000-го.
Раз у него функции работают!

Функции как раз были новой фишкой 2000го
28 апр 14, 11:33    [15945258]     Ответить | Цитировать Сообщить модератору
 Re: Работа с функциями  [new]
Алексей Кр
Member

Откуда: Белгород
Сообщений: 458
2008, 2008 R2, 2012
)))
28 апр 14, 11:34    [15945263]     Ответить | Цитировать Сообщить модератору
 Re: Работа с функциями  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Glory
iap
пропущено...
Не меньше 2000-го.
Раз у него функции работают!

Функции как раз были новой фишкой 2000го
Я и говорю: "не меньше"! :))
28 апр 14, 11:34    [15945268]     Ответить | Цитировать Сообщить модератору
 Re: Работа с функциями  [new]
Glory
Member

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

Функции как раз были новой фишкой 2000го
Я и говорю: "не меньше"! :))

Но в 2000м не было никаких apply join-ов
28 апр 14, 11:40    [15945313]     Ответить | Цитировать Сообщить модератору
 Re: Работа с функциями  [new]
Алексей Кр
Member

Откуда: Белгород
Сообщений: 458
Cross что-то ну никак не хочет работать

select t1.CODE
from table1 t1
	cross apply 
	dbo.[test_1](table1.CODE, 1) a


The multi-part identifier "table1.CODE" could not be bound.
28 апр 14, 11:42    [15945328]     Ответить | Цитировать Сообщить модератору
 Re: Работа с функциями  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Glory
iap
пропущено...
Я и говорю: "не меньше"! :))

Но в 2000м не было никаких apply join-ов
Я и не утверждал, что были
28 апр 14, 11:49    [15945394]     Ответить | Цитировать Сообщить модератору
 Re: Работа с функциями  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Алексей Кр
Cross что-то ну никак не хочет работать

select t1.CODE
from table1 t1
	cross apply 
	dbo.[test_1](table1.CODE, 1) a



The multi-part identifier "table1.CODE" could not be bound.
У Вас в запросе нет table1!
Зато есть t1!
28 апр 14, 11:50    [15945403]     Ответить | Цитировать Сообщить модератору
 Re: Работа с функциями  [new]
Алексей Кр
Member

Откуда: Белгород
Сообщений: 458
Спасибо, это я ступил(
28 апр 14, 12:01    [15945490]     Ответить | Цитировать Сообщить модератору
 Re: Работа с функциями  [new]
Алексей Кр
Member

Откуда: Белгород
Сообщений: 458
хм... снова обращусь с вопросом...
чтото мне сообщили что на 2008 R2 developer edition корректно отработала конструкция, а вот на 2008 R2 Express Edition не отрабатывается...
никто не в курсе по вопросу совместимости?
29 апр 14, 08:31    [15949980]     Ответить | Цитировать Сообщить модератору
 Re: Работа с функциями  [new]
китайский сервер
Member [скрыт] [заблокирован]

Откуда:
Сообщений: 3582
Алексей Кр
хм... снова обращусь с вопросом...
чтото мне сообщили что на 2008 R2 developer edition корректно отработала конструкция, а вот на 2008 R2 Express Edition не отрабатывается...
никто не в курсе по вопросу совместимости?

Ну уж синтаксис-то - "совместим" :)
Сообщение ошибки какое ?
29 апр 14, 08:38    [15949993]     Ответить | Цитировать Сообщить модератору
 Re: Работа с функциями  [new]
Алексей Кр
Member

Откуда: Белгород
Сообщений: 458
Возвращает 0, как говорят...
29 апр 14, 08:41    [15949999]     Ответить | Цитировать Сообщить модератору
 Re: Работа с функциями  [new]
китайский сервер
Member [скрыт] [заблокирован]

Откуда:
Сообщений: 3582
Алексей Кр
Возвращает 0, как говорят...

0 записей, в смысле ?
Значит функция возвращает NULL
Может вам outer apply нужен ?
select t1.CODE
from table1 t1
	outer apply 
	dbo.[test_1](t1.CODE, 1) a
29 апр 14, 08:46    [15950008]     Ответить | Цитировать Сообщить модератору
 Re: Работа с функциями  [new]
китайский сервер
Member [скрыт] [заблокирован]

Откуда:
Сообщений: 3582
китайский сервер
Значит функция возвращает NULL
то есть - ничего не возвращает
29 апр 14, 08:47    [15950013]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить