Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Существуют ли inline scalar functions - MS SQL Server 2005  [new]
Pro100Oleh
Member

Откуда: Kiev
Сообщений: 32
Заходим на линк описания SQL Server 2005 user-defined functions и читаем в самом начале:
MSDN

User-defined scalar functions return a single data value of the type defined in the RETURNS clause. For an inline scalar function, there is no function body; the scalar value is the result of a single statement. For a multistatement scalar function, the function body, defined in a BEGIN...END block, contains a series of Transact-SQL statements that return the single value.

Далее дан пример функции:
CREATE FUNCTION dbo.ufnGetInventoryStock(@ProductID int)
RETURNS int 
AS 
-- Returns the stock level for the product.
BEGIN
    DECLARE @ret int;
    SELECT @ret = SUM(p.Quantity) 
    FROM Production.ProductInventory p 
    WHERE p.ProductID = @ProductID 
        AND p.LocationID = '6';
     IF (@ret IS NULL) 
        SET @ret = 0;
    RETURN @ret;
END;
Я так понимаю, что это пример "multistatement scalar function". А как же тогда создать "inline scalar function"? Видится что-то такого (по аналогии с "inline table-valued function"):
create function dbo.Sum(@a int, @b int)
returns int
as return
(
  select @a + @b
)
Но сервер на такое ругается. Как же их можно создать? Или я не правильно понял документацию и не существует инлайнов? А если существуют — то какая разница с "multistatement"?
19 июн 09, 12:54    [7320184]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли inline scalar functions - MS SQL Server 2005  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Скалярных инлайн функций в MSSQL Server Version<=100 не существует.
19 июн 09, 12:58    [7320218]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли inline scalar functions - MS SQL Server 2005  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Кстати, вот самый свежий официальный перевод: Типы функций
А вот оригнинал:Types of Functions
Всё-таки, "simple" - это не "inline". IMHO
19 июн 09, 13:04    [7320246]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли inline scalar functions - MS SQL Server 2005  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Pro100Oleh
А как же тогда создать "inline scalar function"? Видится что-то такого (по аналогии с "inline table-valued function")
Скалярную конешно нельзя (пока, ИМХО), а вот обойти это огораничение начиная с 2005 несложно - пишите "inline table-valued function" и пользуете её через CROSS APPLY.

http://dev.net.ua/blogs/def1983/pages/Inline_2D00_UDF_2D00_and_2D00_performance.aspx

http://www.sqlmag.com/Article/ArticleID/101104/sql_server_101104.html
19 июн 09, 13:32    [7320428]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли inline scalar functions - MS SQL Server 2005  [new]
Pro100Oleh
Member

Откуда: Kiev
Сообщений: 32
tpg
Скалярную конешно нельзя (пока, ИМХО), а вот обойти это огораничение начиная с 2005 несложно - пишите "inline table-valued function" и пользуете её через CROSS APPLY.

http://dev.net.ua/blogs/def1983/pages/Inline_2D00_UDF_2D00_and_2D00_performance.aspx

http://www.sqlmag.com/Article/ArticleID/101104/sql_server_101104.html

Спасибо, как решить проблему вижу
19 июн 09, 14:43    [7320989]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли inline scalar functions - MS SQL Server 2005  [new]
Pro100Oleh
Member

Откуда: Kiev
Сообщений: 32
iap
А вот оригнинал:Types of Functions
Всё-таки, "simple" - это не "inline". IMHO

Это в 2008-ом назвали simple, а в 2005-ом было inline.

Хотя как называть это мне не важно, вопрос в том что зачем были введенны в документацию simple (inline) функции, если их в природе нет?
19 июн 09, 14:48    [7321038]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли inline scalar functions - MS SQL Server 2005  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Pro100Oleh
iap
А вот оригнинал:Types of Functions
Всё-таки, "simple" - это не "inline". IMHO

Это в 2008-ом назвали simple, а в 2005-ом было inline.

Хотя как называть это мне не важно, вопрос в том что зачем были введенны в документацию simple (inline) функции, если их в природе нет?
Да это просто объяснение такое для начинающих пользователей, чтобы им проще понять было.
Типа "не пугайтесь, скалярная функция может быть простой, из одной команды.
А может быть о-о-чень сложной - из нескольких команд"
Где Вы там определение увидели?
19 июн 09, 14:53    [7321085]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли inline scalar functions - MS SQL Server 2005  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Случайно выполнил запрос
SELECT *
FROM master.dbo.spt_values
WHERE type='O9T';
и получил вот такой результат

name number type low high status
----------------------------------- ----------- ---- ----------- ----------- -----------
AF: aggregate function -1 O9T 0 0 0
AP: application -1 O9T 0 0 0
C : check cns -1 O9T 0 0 0
D : default (maybe cns) -1 O9T 0 0 0
EN: event notification -1 O9T 0 0 0
F : foreign key cns -1 O9T 0 0 0
FN: scalar function -1 O9T 0 0 0
FS: assembly scalar function -1 O9T 0 0 0
FT: assembly table function -1 O9T 0 0 0
IF: inline function -1 O9T 0 0 0
IS: inline scalar function -1 O9T 0 0 0
IT: internal table -1 O9T 0 0 0
L : log -1 O9T 0 0 0
P : stored procedure -1 O9T 0 0 0
PC : assembly stored procedure -1 O9T 0 0 0
PK: primary key cns -1 O9T 0 0 0
R : rule -1 O9T 0 0 0
RF: replication filter proc -1 O9T 0 0 0
S : system table -1 O9T 0 0 0
SN: synonym -1 O9T 0 0 0
SQ: queue -1 O9T 0 0 0
TA: assembly trigger -1 O9T 0 0 0
TF: table function -1 O9T 0 0 0
TR: trigger -1 O9T 0 0 0
U : user table -1 O9T 0 0 0
UQ: unique key cns -1 O9T 0 0 0
V : view -1 O9T 0 0 0
X : extended stored proc -1 O9T 0 0 0
sysobjects.type, reports 0 O9T 0 0 0


Так что ...
Когда-нибудь сделают?
23 июн 09, 15:52    [7333843]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить