ПредишенСледващото

Езици за програмиране обикновено имат два вида съчетания:

потребителски дефинирани функции (СДС).

Както беше обсъдено в предишната статия, съхранени процедури се състоят от редица инструкции и имат нула или повече входни параметри, но обикновено не се връщат никакви параметри. За разлика от съхранени процедури, функции, винаги се връщат една стойност. В този раздел ще разгледаме създаването и използването на потребителски дефинирани функции (дефинирани от потребителя функции - СДС).

Създаване и изпълнение потребителски дефинирани функции

дефинирани от потребителя функции, създадени с сътворяват изявление функция. който има следния синтаксис:

Schema_name параметър определя името на схемата, който се определя на собственика на генерирания СДС и параметър function_name посочва името на функцията. @param параметър е входен параметър на функцията (формално аргумент), чиито тип данни се определя от параметъра тип. Параметри - стойности, които се предават чрез дефинирани от потребителя функция на обаждащия се да се използват в него. параметър подразбиране определя стойността по подразбиране за съответния параметър на функцията. (Стойността по подразбиране може да бъде NULL.)

Връща предложението се определят от вида на стойности на данни, върнати от СДС. Тя може да бъде почти всеки стандартен тип данни се поддържа от системата от база данни, в това число тип данни таблица. Единственият типа данни, които не можете да посочите тип клеймото на данни.

ФГР могат да бъдат или скаларни или таблични. Скаларни функции връщат атомен (скаларна) стойност. Това означава, че в клаузата за връщане на скаларна функция показва една от стандартните типове данни. Функцията е една маса, ако отчета за ВРЪЩАНЕТО връща набор от редове.

Алтернативен предложението с SCHEMABINDING СДС обекти свързват база данни за който се отнася тази функция. След това, всеки опит за промяна на обект на базата данни, която е достъпна за функцията, претърпява провал. (Lock функция за обекти на базата данни, за които се отнася, се отстранява само когато промените функцията, и след това SCHEMABINDING опция вече не е зададен.)

За да създадете функция по време на употреба SCHEMABINDING оферта, обекти на база данни достъпни чрез функцията трябва да отговарят на следните условия:

всички представления и други СДС, който е съставен, функциите, които трябва да бъдат обвързани с схема;

всички обекти на база данни (таблици, изгледи, и СДС), трябва да бъдат в една и съща база данни, както са дефинирани функции.

параметър блок определя блок започне / END, съдържащ прилагането на функцията. Последното изявление блок трябва да е изявление RETURN с аргумент. (Аргумент стойност е стойността на връщане от функция.) Вътрешна BEGIN / END блок са разрешени само следните инструкции:

изявление задача, като SET;

инструкции за контролиране на скоростта на изпълнение, като време и IF;

инструкции ДЕКЛАРИРАТ, локална променлива;

SELECT инструкция проба, съдържаща списъци колони изрази, чиито стойности са възложени на променливи, които са локални за даден функция;

Вмъкване, обновяване и изтриване, които се променят с типа на променливите TABLE данни, които са местни за функцията.

По подразбиране, CREATE FUNCTION инструкция може да се използва само членовете на системния администратор, определен сървър и фиксирани роля db_owner база данни или db_ddladmin. Но членовете на тези роли могат да възложат това право на други потребители, използващи за отпускане на безвъзмездни CREATE изявление функция.

Следният пример показва как да създадете ComputeCosts функции:

ComputeCosts функция изчислява допълнителните разходи, произтичащи от увеличението на бюджета на проекта. само изходен параметър, @percent, определя процентно увеличение на бюджетите. блок BEGIN / END първи декларира две местни променливи: @addCosts и @sumBudget, а след това използвайте SELECT изявление променлива @sumBudget възлага на общата сума на всички бюджети. След това, функцията изчислява общите допълнителни разходи и от инструкции за връщане връща тази стойност.

Call потребителски дефинирана функция

Дефинирани от потребителя функции могат да бъдат извикани чрез Transact-SQL инструкции, като SELECT, INSERT, UPDATE или DELETE. Извикването на функциите се осъществява, като се посочва името й с чифт скоби в края, в който може да се зададе един или повече аргументи. Аргументи - стойности или изрази, които се предават на входните параметри, определени непосредствено след името на функцията. Когато се обадите функция, когато нейните параметри към стойностите по подразбиране не са определени за всички тези параметри трябва да се предостави аргументи в същия ред, в който параметрите са определени в отчета за CREATE FUNCTION.

Следният пример показва покана ComputeCosts SELECT инструкции функция:

Избор на отчета в примера показва имената и номерата на всички проекти, чиито бюджети са по-ниски от общите допълнителни разходи за всички проекти за процентно увеличение на дадена стойност.

Имената на Transact-SQL изявление функция трябва да бъдат посочени с помощта на имена, които се състоят от две части: име на схема и името на функцията, така че в примера, ние използвахме схемата на префикс DBO.

Таблица-ценен функция

Както бе споменато по-рано, функцията е една маса-ценен, ако предложението си данъчни декларации по връща набор от редове. В зависимост от начина на определените телесни функции, които връщат стойност на таблицата с функция са класифицирани като вдлъбната (инлайн) и mnogoinstruktsionnye (multistatement). Ако клаузата RETURNS е посочена таблица с ключови думи, без списък придружаваща колона, тази функция е вградена вътре. Изберете функция изявление инлайн извежда резултат определя под формата на променлив тип данни таблица.

Mnogoinstruktsionnaya маса ценен функция съдържа името, което идентифицира вътрешна променлива тип данни таблица. Този тип данни е посочена таблица с ключови думи. което следва името на променливата. В тази променлива се вмъква в избран ред, и служи като стойността за връщане на функцията.

Създаване на таблица-ценен функции, показани в примера по-долу:

функция EmployeesInProject показва имената на всички служители, които работят по даден проект, броят на които се определя от @projectNumber входен параметър. Има предвид, че функцията обикновено се връща набор редове, предложението се връща в дефиницията на тази функция съдържа дума изявлението на масата, което показва, че функцията връща стойност на маса. (Имайте предвид, че в примера на BEGIN / END блок трябва да бъде намалена, както и отчета за RETURN съдържа SELECT изявление.)

Използване на функция Employees_in_Project е даден в примера по-долу:

Transact-SQL, дефинирани от потребителя функции

Таблица-ценен функции и инструкции ПРИЛАГАТ

ОТНАСЯ релационна обучение Ви дава възможност да извикате функция на маса ценен за всеки ред в израз на маса. Тази инструкция се определя в ОТ клауза на SELECT изявление подходящият по същия начин, както отчета за JOIN. ОТНАСЯ инструкция може да се комбинира с функция за маса, за да се получи резултат, подобен на набора от резултати операции се присъединяват две маси. Има две форми ПРИЛАГАТ инструкции:

Ръководство КРОСС ОТНАСЯ връща тези редове от таблицата за изразяване на вътрешното (вляво), които съвпадат с външната (вдясно) маса израз. По този начин, логично, крос за експлоатация ПРИЛАГАТ функции същите като инструкцията INNER JOIN.

Инструкции ВЪНШНА ОТНАСЯ връща всички редове от вътрешната (вляво) маса израз. (За тези редове за които няма мач в външен израз на масата, той съдържа NULL стойности в колоните на външния израз на масата.) Логично е, инструкция ВЪНШНА ОТНАСЯ е еквивалентно на лявата външна JOIN изявление.

Кандидатствайте инструкции, показани в примерите по-долу:

GetJob () връща набор от редове с Works_on маса. В примера по-долу, този резултат комплект е "свързана" със съдържанието на предложението ОТНАСЯ маса служителя:

В резултат на тези две функции ще бъдат следващите две таблици (показва след изпълнението на втората функция):

Transact-SQL, дефинирани от потребителя функции

В първия пример резултат набор, маса функция GetJob () "свързан" със съдържанието на таблицата от служителите КРОСС ПРИЛАГАТ инструкции. GetJob () функция играе ролята на дясната входа и масата за служителите - наляво. полето експресия вход е изчислено за левия вход и получава линия на всеки ред са комбинирани за създаване на крайния резултат.

Второто искане подобен на първия (но използва водач ВЪНШНА ОТНАСЯ), което логично съответства на работата на външната връзка на двете таблици.

Таблица-ценен параметри

Използването на маса стойност е показано в примера по-долу:

В този пример, той първо се определя типът на маса departmentType. Това означава, че типът е вида на таблица с данни, с което позволява вмъкване на линиите. В процедура InsertProc декларира променлива от тип данни @Moscow departmentType. (Оферта READONLY показва, че съдържанието на тази маса не може да се променя.) В следващия пакет в таблицата се вмъкват променливи данни, след това процедурата се изпълнява. По време на изпълнението на процедурата вмъква ред на променливата на маса в временна таблица #moscowTable на. Вмъкнати съдържание временна таблица е както следва:

С помощта на таблица-ценен параметри предоставя следните предимства:

опростени програмен модел съчетания;

Това намалява броя на обажданията към сървъра и да получат съответните отговори;

маса резултат може да има произволен брой редове.

Промяната на структурата на потребителски дефинирани инструкции

Transact-SQL език поддържа изявление променящи функцията. който променя структурата на потребителски дефинирани инструкции (СДС). Тази инструкция обикновено се използва за отстраняване на функцията за свързване към веригата. Всички параметри ALTER изявление ФУНКЦИЯ има същото значение, както и същ параметър CREATE изявление функция.

За изтриване на СДС се използва инструкция DROP функция. Изтриване на функция може да бъде само собственик или член на предварително определена роля db_owner или администратор.

дефинирани от потребителя функции, както и CLR

В предишна статия разгледахме как да създадете съхранена процедура от управляван код, за CLR в езика C #. Този подход може да се използва за потребителски дефинирани функции (UDF), с единствената разлика, че СДС да спаси обект на базата данни, изявлението CREATE FUNCTION, вместо СЪЗДАВАНЕ НА ПРОЦЕДУРА. В допълнение, дефинирани от потребителя функции се използват и в различен контекст, отколкото за запомнени процедури като СДС винаги връща стойност.

Следният пример показва изходния код за потребителски дефинирани функции (UDF), се прилагат в език C #:

В изходния код, дефинирани от потребителя функции в примера на новия бюджет на проекта се изчислява чрез увеличаване на стария бюджет с определен процент. Можете да използвате CREATE събрание отчета за да се създаде CLR монтаж в базата данни, както беше показано по-рано. Ако сте учили примерите от предишната статия, и е добавил монтажни CLRStoredProcedures в базата данни, можете да актуализирате събранието, след компилация с нов клас (CLRStoredProcedures е името на проекта си C # класове, в които бих добавил определението на съхранени процедури и функции, може монтажа може да се нарича по различен начин):

CREATE FUNCTION инструкция в примера по-долу метод ComputeBudget запазва като обект на базата данни, която след това може да се използва в инструкциите за манипулиране на данните.

Използването на един от тези указания, изберете инструкция е показано в примера по-долу:

Дефинирани от потребителя функции могат да бъдат поставени на различни места на SELECT изявлението. В горните примери, ако тя не съществува в клаузата WHERE, ОТ, а в списъка за избор SELECT изявление.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!