Ms sql функции возвращающие табличные значения

Содержание
  1. Табличные функции в Transact-SQL – описание и примеры создания
  2. Пример создания простой табличной функции
  3. Пример создания табличной функции, в которой можно программировать
  4. Временные таблицы в Transact-SQL — описание и пример создания
  5. Создание и выполнение определяемых пользователем функций
  6. Вызов определяемой пользователем функции
  7. Возвращающие табличное значение функции
  8. Возвращающие табличное значение функции и инструкция APPLY
  9. Возвращающие табличное значение параметры
  10. Изменение структуры определяемых пользователями инструкций
  11. Определяемые пользователем функции и среда CLR
  12. Различия между функциями Transact-SQL и среды CLR с табличным значением Differences Between Transact-SQL and CLR Table-Valued Functions
  13. Реализация функций с табличным значением Implementing Table-Valued Functions
  14. Параметры, возвращающие табличные значения Table-Valued Parameters
  15. Выходные параметры и функции с табличным значением Output Parameters and Table-Valued Functions
  16. Определение функции с табличным значением на языке Transact-SQL Defining a Table-Valued Function in Transact-SQL
  17. Образец функции с табличным значением A Sample Table-Valued Function
  18. Образец. Возвращение результатов запроса SQL Server Sample: Returning the Results of a SQL Server Query

Сегодня мы поговорим об очень полезном функционале языка Transact-SQL — это табличные функции. Так как у нас сайт для начинающих программистов, а такие программисты по началу боятся использовать табличные функции или просто не знают, зачем они нужны. Поэтому я решил рассказать про основы создания таких функций. А также рассказать про использование временных таблиц в процедурах или SQL инструкциях.

Табличные функции в Transact-SQL – описание и примеры создания

Раньше мы уже знакомились с функциями, которые возвращают таблицу, правда, на языке PL/pgSQL для сервера PostgreSQL (Написание табличной функции на PL/pgSQL). Теперь пришло время поговорить о такой реализации на Transact-SQL.

Вспомним, а для чего нам вообще нужны такие функции. Самый простой ответ на этот вопрос это то, что в таких функциях можно программировать (объявлять переменные, выполнять какие-то расчеты) и передавать параметры внутрь этой функции, как в обычных скалярных функциях, а результат получать в виде таблицы. И это хорошо, ведь в представлениях (вьюхах) этого делать нельзя, а процедура ничего не возвращает (можно сделать, чтобы возвращала, но это в большинстве случае не очень удобно).

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

Итак, приступим, для начала приведем самый простой вариант реализации такой функции. Допустим, нам нужно выбрать несколько полей из таблицы по определенному критерию.

Примечание! Данный пример можно реализовать и с помощью представления. Но мы пока только учимся писать такие функции.

В итоге мы создали функцию, в которую будем передавать один параметр id, его мы используем в условии исходного SQL запроса.

Получить данные из этой функции можно следующим образом:

Как видите все проще простого. Теперь давайте создадим функцию уже с использованием программирования в этой функции.

Пример создания табличной функции, в которой можно программировать

Здесь мы уже программируем и можем выполнять любые действия как в обычных функциях и процедурах, при этом получая результат в виде таблицы. В этом примере мы передаем один параметр внутрь нашей функции (их может быть несколько!), внутри функции мы уже смотрим, что за параметр к нам пришел, и на основе этого уже формируем условие для запроса. Как Вы понимаете это тоже простой пример, но можно писать очень и очень сложные алгоритмы как в процедурах, именно поэтому, и созданы эти табличные функции.

Теперь давайте обратимся к нашей функции, например, вот так

Временные таблицы в Transact-SQL — описание и пример создания

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

Например, в процедуре Вам необходимо выполнять много расчетов и запоминать их результат, а создавать дополнительные представления, табличные функции или вообще таблицы, которые потом нужно удалять, так как они Вам после выполнения процедуры будут не нужны, Вам просто не охота, да и это не очень удобно. Поэтому в Microsoft SQL Server существует такая возможность как «Временные таблицы». Давайте научимся их создавать. А создавать и использовать их очень просто, например, в коде своей процедуры, Вы хотите сохранить результат в таблицу, для этого просто создаете эту таблицу вот так (перед названием таблицы ставится знак решетки #).

Таким образом, у Вас в базе фактически таблица не будет создана (и Вы ее нигде не увидите и, соответственно, не сможете обратиться к ней), она будет создана только для этой сессии, и обратиться к ней можно только из этой сессии, в которой Вы ее создали. То есть, даже если Вы создаете такую таблицу в одном окне запроса Management Studio, то из другого окна, Вы к ней не сможете обратиться. Это упрощает разработку процедуры и в некоторых случаях сильно ее ускоряет (в качестве альтернативы можно использовать табличные переменные).

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

Для более детального изучения языка Transact-SQL рекомендую книгу «Путь программиста T-SQL», в которой я очень подробно рассказываю про все основные конструкции и возможности данного языка.

В языках программирования обычно имеется два типа подпрограмм:

определяемые пользователем функции (UDF).

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

Создание и выполнение определяемых пользователем функций

Определяемые пользователем функции создаются посредством инструкции CREATE FUNCTION, которая имеет следующий синтаксис:

Параметр schema_name определяет имя схемы, которая назначается владельцем создаваемой UDF, а параметр function_name определяет имя этой функции. Параметр @param является входным параметром функции (формальным аргументом), чей тип данных определяется параметром type. Параметры функции – это значения, которые передаются вызывающим объектом определяемой пользователем функции для использования в ней. Параметр default определяет значение по умолчанию для соответствующего параметра функции. (Значением по умолчанию также может быть NULL.)

Предложение RETURNS определяет тип данных значения, возвращаемого UDF. Это может быть почти любой стандартный тип данных, поддерживаемый системой баз данных, включая тип данных TABLE. Единственным типом данных, который нельзя указывать, является тип данных timestamp.

Определяемые пользователем функции могут быть либо скалярными, либо табличными. Скалярные функции возвращают атомарное (скалярное) значение. Это означает, что в предложении RETURNS скалярной функции указывается один из стандартных типов данных. Функция является табличной, если предложение RETURNS возвращает набор строк.

Параметр WITH ENCRYPTION в системном каталоге кодирует информацию, содержащую текст инструкции CREATE FUNCTION. Таким образом, предотвращается несанкционированный просмотр текста, который был использован для создания функции. Данная опция позволяет повысить безопасность системы баз данных.

Читайте также:  Windows 7 ultimate x64 rutracker

Альтернативное предложение WITH SCHEMABINDING привязывает UDF к объектам базы данных, к которым эта функция обращается. После этого любая попытка модифицировать объект базы данных, к которому обращается функция, претерпевает неудачу. (Привязка функции к объектам базы данных, к которым она обращается, удаляется только при изменении функции, после чего параметр SCHEMABINDING больше не задан.)

Для того чтобы во время создания функции использовать предложение SCHEMABINDING, объекты базы данных, к которым обращается функция, должны удовлетворять следующим условиям:

все представления и другие UDF, к которым обращается определяемая функция, должны быть привязаны к схеме;

все объекты базы данных (таблицы, представления и UDF) должны быть в той же самой базе данных, что и определяемая функция.

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

инструкции присвоения, такие как SET;

инструкции для управления ходом выполнения, такие как WHILE и IF;

инструкции DECLARE, объявляющие локальные переменные;

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

инструкции INSERT, UPDATE и DELETE, которые изменяют переменные с типом данных TABLE, являющиеся локальными для данной функции.

По умолчанию инструкцию CREATE FUNCTION могут использовать только члены предопределенной роли сервера sysadmin и предопределенной роли базы данных db_owner или db_ddladmin. Но члены этих ролей могут присвоить это право другим пользователям с помощью инструкции GRANT CREATE FUNCTION.

В примере ниже показано создание функции ComputeCosts:

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

Вызов определяемой пользователем функции

Определенную пользователем функцию можно вызывать с помощью инструкций Transact-SQL, таких как SELECT, INSERT, UPDATE или DELETE. Вызов функции осуществляется, указывая ее имя с парой круглых скобок в конце, в которых можно задать один или несколько аргументов. Аргументы – это значения или выражения, которые передаются входным параметрам, определяемым сразу же после имени функции. При вызове функции, когда для ее параметров не определены значения по умолчанию, для всех этих параметров необходимо предоставить аргументы в том же самом порядке, в каком эти параметры определены в инструкции CREATE FUNCTION.

В примере ниже показан вызов функции ComputeCosts в инструкции SELECT:

Инструкция SELECT в примере отображает названия и номера всех проектов, бюджеты которых меньше, чем общие дополнительные расходы по всем проектам при заданном значении процентного увеличения.

В инструкциях Transact-SQL имена функций необходимо задавать, используя имена, состоящие из двух частей: schema name и function name, поэтому в примере мы использовали префикс схемы dbo.

Возвращающие табличное значение функции

Как уже упоминалось ранее, функция является возвращающей табличное значение, если ее предложение RETURNS возвращает набор строк. В зависимости от того, каким образом определено тело функции, возвращающие табличное значение функции классифицируются как встраиваемые (inline) и многоинструкционные (multistatement). Если в предложении RETURNS ключевое слово TABLE указывается без сопровождающего списка столбцов, такая функция является встроенной. Инструкция SELECT встраиваемой функции возвращает результирующий набор в виде переменной с типом данных TABLE.

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

Создание возвращающей табличное значение функции показано в примере ниже:

Функция EmployeesInProject отображает имена всех сотрудников, работающих над определенным проектом, номер которого задается входным параметром @projectNumber. Тогда как функция в общем случае возвращает набор строк, предложение RETURNS в определение данной функции содержит ключевое слово TABLE, указывающее, что функция возвращает табличное значение. (Обратите внимание на то, что в примере блок BEGIN/END необходимо опустить, а предложение RETURN содержит инструкцию SELECT.)

Использование функции Employees_in_Project приведено в примере ниже:

Возвращающие табличное значение функции и инструкция APPLY

Реляционная инструкция APPLY позволяет вызывать возвращающую табличное значение функцию для каждой строки табличного выражения. Эта инструкция задается в предложении FROM соответствующей инструкции SELECT таким же образом, как и инструкция JOIN. Инструкция APPLY может быть объединена с табличной функцией для получения результата, похожего на результирующий набор операции соединения двух таблиц. Существует две формы инструкции APPLY:

Инструкция CROSS APPLY возвращает те строки из внутреннего (левого) табличного выражения, которые совпадают с внешним (правым) табличным выражением. Таким образом, логически, инструкция CROSS APPLY функционирует так же, как и инструкция INNER JOIN.

Инструкция OUTER APPLY возвращает все строки из внутреннего (левого) табличного выражения. (Для тех строк, для которых нет совпадений во внешнем табличном выражении, он содержит значения NULL в столбцах внешнего табличного выражения.) Логически, инструкция OUTER APPLY эквивалентна инструкции LEFT OUTER JOIN.

Применение инструкции APPLY показано в примерах ниже:

Функция GetJob() возвращает набор строк с таблицы Works_on. В примере ниже этот результирующий набор "соединяется" предложением APPLY с содержимым таблицы Employee:

Результатом выполнения этих двух функций будут следующие две таблицы (отображаются после выполнения второй функции):

В первом запросе примера результирующий набор табличной функции GetJob() "соединяется" с содержимым таблицы Employee посредством инструкции CROSS APPLY. Функция GetJob() играет роль правого ввода, а таблица Employee – левого. Выражение правого ввода вычисляется для каждой строки левого ввода, а полученные строки комбинируются, создавая конечный результат.

Второй запрос похожий на первый (но в нем используется инструкция OUTER APPLY), который логически соответствует операции внешнего соединения двух таблиц.

Возвращающие табличное значение параметры

Во всех версиях сервера, предшествующих SQL Server 2008, задача передачи подпрограмме множественных параметров была сопряжена со значительными сложностями. Для этого сначала нужно было создать временную таблицу, вставить в нее передаваемые значения, и только затем можно было вызывать подпрограмму. Начиная с версии SQL Server 2008, эта задача упрощена, благодаря возможности использования возвращающих табличное значение параметров, посредством которых результирующий набор может быть передан соответствующей подпрограмме.

Использование возвращающего табличное значение параметра показано в примере ниже:

В этом примере сначала определяется табличный тип departmentType. Это означает, что данный тип является типом данных TABLE, вследствие чего он разрешает вставку строк. В процедуре InsertProc объявляется переменная @Moscow с типом данных departmentType. (Предложение READONLY указывает, что содержимое этой таблицы нельзя изменять.) В последующем пакете в эту табличную переменную вставляются данные, после чего процедура запускается на выполнение. В процессе исполнения процедура вставляет строки из табличной переменной во временную таблицу #moscowTable. Вставленное содержимое временной таблицы выглядит следующим образом:

Читайте также:  Материнская плата erp ready

Использование возвращающих табличное значение параметров предоставляет следующие преимущества:

упрощается модель программирования подпрограмм;

уменьшается количество обращений к серверу и получений соответствующих ответов;

таблица результата может иметь произвольное количество строк.

Изменение структуры определяемых пользователями инструкций

Язык Transact-SQL также поддерживает инструкцию ALTER FUNCTION, которая модифицирует структуру определяемых пользователями инструкций (UDF). Эта инструкция обычно используется для удаления привязки функции к схеме. Все параметры инструкции ALTER FUNCTION имеют такое же значение, как и одноименные параметры инструкции CREATE FUNCTION.

Для удаления UDF применяется инструкция DROP FUNCTION. Удалить функцию может только ее владелец или член предопределенной роли db_owner или sysadmin.

Определяемые пользователем функции и среда CLR

В предыдущей статье мы рассмотрели способ создания хранимых процедур из управляемого кода среды CLR на языке C#. Этот подход можно использовать и для определяемых пользователем функций (UDF), с одним только различием, что для сохранения UDF в виде объекта базы данных используется инструкция CREATE FUNCTION, а не CREATE PROCEDURE. Кроме этого, определяемые пользователем функции также применяются в другом контексте, чем хранимые процедуры, поскольку UDF всегда возвращают значение.

В примере ниже показан исходный код определяемых пользователем функций (UDF), реализованный на языке C#:

В исходном коде определяемых пользователем функций в примере вычисляется новый бюджет проекта, увеличивая старый бюджет на определенное количество процентов. Вы можете использовать инструкцию CREATE ASSEMBLY для создания сборки CLR в базе данных, как это было показано ранее. Если вы прорабатывали примеры из предыдущей статьи и уже добавили сборку CLRStoredProcedures в базу данных, то вы можете обновить эту сборку, после ее перекомпиляции с новым классом (CLRStoredProcedures это имя моего проекта классов C#, в котором я добавлял определение хранимых процедур и функций, у вас сборка может называться иначе):

Инструкция CREATE FUNCTION в примере ниже сохраняет метод ComputeBudget в виде объекта базы данных, который в дальнейшем можно использовать в инструкциях для манипулирования данными.

Использование одной из таких инструкций, инструкции SELECT, показано в примере ниже:

Определяемую пользователем функцию можно поместить в разных местах инструкции SELECT. В примерах выше она вызывалась в предложениях WHERE, FROM и в списке выбора оператора SELECT.

ОБЛАСТЬ ПРИМЕНЕНИЯ: SQL Server База данных SQL Azure Azure Synapse Analytics (хранилище данных SQL) Parallel Data Warehouse APPLIES TO: SQL Server Azure SQL Database Azure Synapse Analytics (SQL DW) Parallel Data Warehouse

Функция с табличным значением представляет собой определяемую пользователем функцию, которая возвращает таблицу. A table-valued function is a user-defined function that returns a table.

Начиная с SQL Server 2005 (9.x) SQL Server 2005 (9.x) , SQL Server SQL Server расширяет возможности возвращающих табличное значение функций, позволяя определить функцию с табличным значением на любом управляемом языке. Beginning with SQL Server 2005 (9.x) SQL Server 2005 (9.x) , SQL Server SQL Server extends the functionality of table-valued functions by allowing you to define a table-valued function in any managed language. Данные возвращаются из функции с табличным через IEnumerable или IEnumerator объекта. Data is returned from a table-valued function through an IEnumerable or IEnumerator object.

Для функций, возвращающих табличные значения, не может содержать столбцы типа возвращаемой таблицы, столбцы отметок времени и столбцы строкового типа данных не в Юникоде (такие как char, varchar, и текст). For table-valued functions, the columns of the return table type cannot include timestamp columns or non-Unicode string data type columns (such as char, varchar, and text). Ограничение NOT NULL не поддерживается. The NOT NULL constraint is not supported.

Дополнительные сведения о функциях CLR с табличным извлечь MSSQLTips введение в SQL Server со средой CLR таблицы функции с табличным значением. For more information on CLR Table-Valued functions, check out MSSQLTips’ Introduction to SQL Server CLR table valued functions!

Различия между функциями Transact-SQL и среды CLR с табличным значением Differences Between Transact-SQL and CLR Table-Valued Functions

Возвращающие табличное значение функции Transact-SQL Transact-SQL материализуют результаты вызова в промежуточной таблице. Transact-SQL Transact-SQL table-valued functions materialize the results of calling the function into an intermediate table. По этой причине они поддерживают в результатах ограничения и уникальные индексы. Since they use an intermediate table, they can support constraints and unique indexes over the results. Это исключительно полезно при возвращении результатов большого объема. These features can be extremely useful when large results are returned.

Функции CLR с табличным значением, напротив, представляют альтернативу в виде потока. In contrast, CLR table-valued functions represent a streaming alternative. Материализация всего результирующего набора в одной таблице не требуется. There is no requirement that the entire set of results be materialized in a single table. IEnumerable объект, возвращаемый управляемой функции напрямую вызывается планом выполнения запроса, который вызывает функцию с табличным, и эти результаты используются в инкрементном режиме. The IEnumerable object returned by the managed function is directly called by the execution plan of the query that calls the table-valued function, and the results are consumed in an incremental manner. Такая потоковая модель обеспечивает немедленную обработку результатов сразу после получения первой строки, вместо того чтобы ожидать заполнения всей таблицы. This streaming model ensures that results can be consumed immediately after the first row is available, instead of waiting for the entire table to be populated. Она также полезна, если возвращается очень большое число строк, поскольку таблица не материализуется в памяти как единое целое. It is also a better alternative if you have very large numbers of rows returned, because they do not have to be materialized in memory as a whole. Например, функция с табличным значением может использоваться для синтаксического анализа текстового файла и возвращения каждой строки текста в виде строки таблицы. For example, a managed table-valued function could be used to parse a text file and return each line as a row.

Реализация функций с табличным значением Implementing Table-Valued Functions

Функции с табличным значением реализуются в виде методов класса в сборке Microsoft Microsoft .NET Framework. Implement table-valued functions as methods on a >Microsoft Microsoft .NET Framework assembly. Необходимо реализовать в коде функции, возвращающие табличные значения IEnumerable интерфейс. Your table-valued function code must implement the IEnumerable interface. IEnumerable интерфейс определен в .NET Framework. The IEnumerable interface is defined in the .NET Framework. Типы, представляющие массивы и коллекции в .NET Framework уже реализуют IEnumerable интерфейс. Types representing arrays and collections in the .NET Framework already implement the IEnumerable interface. Это облегчает написание функций с табличным значением, преобразующих коллекцию или массив в результирующий набор. This makes it easy for writing table-valued functions that convert a collection or an array into a result set.

Читайте также:  Как включить микрофон в whatsapp

Параметры, возвращающие табличные значения Table-Valued Parameters

Возвращающие табличное значение параметры — это определяемые пользователем табличные типы, которые передаются в процедуру или функцию, предоставляя эффективный способ передачи на сервер нескольких строк данных. Table-valued parameters are user-defined table types that are passed into a procedure or function and provide an efficient way to pass multiple rows of data to the server. Возвращающие табличное значение параметры выполняют функции, аналогичные массивам параметров, но обладают большей гибкостью и лучше интегрируются с Transact-SQL Transact-SQL . Table-valued parameters prov >Transact-SQL Transact-SQL . Они также обеспечивают возможность повышения производительности. They also provide the potential for better performance. Кроме того, возвращающие табличное значение параметры способствуют сокращению циклов приема-передачи данных с сервера и на сервер. Table-valued parameters also help reduce the number of round trips to the server. Вместо того чтобы отправлять на сервер несколько запросов (как в случае списка скалярных параметров), данные можно отправить в виде возвращающего табличное значение параметра. Instead of sending multiple requests to the server, such as with a list of scalar parameters, data can be sent to the server as a table-valued parameter. Определяемый пользователем табличный тип нельзя передавать в виде возвращающего табличное значение параметра в управляемую хранимую процедуру или функцию, которая выполняется в процессе SQL Server SQL Server . Кроме того, такие процедуры и функции не могут возвращать определяемые пользователем табличные типы. A user-defined table type cannot be passed as a table-valued parameter to, or be returned from, a managed stored procedure or function executing in the SQL Server SQL Server process. Дополнительные сведения о возвращающих табличные значения параметрах см. в разделе Использование параметров, возвращающих табличные значения (ядро СУБД). For more information about table-valued parameters, see Use Table-Valued Parameters (Database Engine).

Выходные параметры и функции с табличным значением Output Parameters and Table-Valued Functions

Возврат данных из функции с табличным значением может производиться через выходные параметры. Information may be returned from table-valued functions using output parameters. Соответствующий аргумент в коде реализации функции с табличным значением должен передаваться по ссылке. The corresponding parameter in the implementation code table-valued function should use a pass-by-reference parameter as the argument. Следует отметить, что язык Visual Basic не поддерживает выходные параметры так, как они поддерживаются в языке Visual C#. Note that Visual Basic does not support output parameters in the same way that Visual C# does. Необходимо указать параметр по ссылке и применить атрибут для представления выходного параметра, как описано ниже: You must specify the parameter by reference and apply the attribute to represent an output parameter, as in the following:

Определение функции с табличным значением на языке Transact-SQL Defining a Table-Valued Function in Transact-SQL

Синтаксис для определения функции CLR с табличным аналогичен Transact-SQL Transact-SQL функции, возвращающие табличные значения, с добавлением ВНЕШНЕЕ имя предложение. The syntax for defining a CLR table-valued function is similar to that of a Transact-SQL Transact-SQL table-valued function, with the addition of the EXTERNAL NAME clause. Пример: For example:

Функции с табличным значением используются для представления данных в реляционном формате для дальнейшей обработки в запросах, например: Table-valued functions are used to represent data in relational form for further processing in queries such as:

Функции с табличным значением могут вернуть таблицу в следующих случаях. Table-valued functions can return a table when:

Если они созданы из скалярных входных аргументов. Created from scalar input arguments. Например, функция с табличным значением, принимающая строку чисел, разделенных запятыми, и преобразующая ее в таблицу. For example, a table-valued function that takes a comma-delimited string of numbers and pivots them into a table.

Если они созданы из внешних данных. Generated from external data. Например, функция с табличным значением, считывающая журнал событий и представляющая его в виде таблицы. For example, a table-valued function that reads the event log and exposes it as a table.

Примечание табличную функцию может выполнять только доступ к данным через Transact-SQL Transact-SQL запроса в InitMethod метод, а не в FillRow метод. Note A table-valued function can only perform data access through a Transact-SQL Transact-SQL query in the InitMethod method, and not in the FillRow method. InitMethod должны быть помечены SqlFunction.DataAccess.Read свойству атрибута, если Transact-SQL Transact-SQL выполняется запрос. The InitMethod should be marked with the SqlFunction.DataAccess.Read attribute property if a Transact-SQL Transact-SQL query is performed.

Образец функции с табличным значением A Sample Table-Valued Function

Следующая функция с табличным значением возвращает сведения из журнала системных событий. The following table-valued function returns information from the system event log. Функция принимает один строковый аргумент, содержащий имя журнала событий. The function takes a single string argument containing the name of the event log to read.

Образец кода Sample Code
Объявление и использование образца функции с табличным значением Declaring and Using the Sample Table-Valued Function

После компиляции образца возвращающей табличное значение функции его можно объявить в Transact-SQL Transact-SQL следующим образом. After the sample table-valued function has been compiled, it can be declared in Transact-SQL Transact-SQL like this:

Выполнение объектов базы данных, написанных на языке Visual C++ и скомпилированных с параметром /clr:pure, не поддерживается в SQL Server 2005 (9.x) SQL Server 2005 (9.x) . Visual C++ database objects compiled with /clr:pure are not supported for execution on SQL Server 2005 (9.x) SQL Server 2005 (9.x) . Например, в число таких объектов базы данных входят функции с табличным значением. For example, such database objects include table-valued functions.

Чтобы проверить образец, выполните следующий код Transact-SQL Transact-SQL . To test the sample, try the following Transact-SQL Transact-SQL code:

Образец. Возвращение результатов запроса SQL Server Sample: Returning the Results of a SQL Server Query

В следующем образце показана возвращающая табличное значение функция, которая запрашивает базу данных SQL Server SQL Server . The following sample shows a table-valued function that queries a SQL Server SQL Server database. В этом образце используется база данных AdventureWorks Light из SQL Server 2008 SQL Server 2008 . This sample uses the AdventureWorks Light database from SQL Server 2008 SQL Server 2008 . См. в разделе https://www.codeplex.com/sqlserversamples Дополнительные сведения о загрузке AdventureWorks. See https://www.codeplex.com/sqlserversamples for more information on downloading AdventureWorks.

Задайте для файла исходного кода имя FindInvalidEmails.cs или FindInvalidEmails.vb. Name your source code file FindInvalidEmails.cs or FindInvalidEmails.vb.

Скомпилируйте исходный код в библиотеку DLL и скопируйте ее в корневой каталог диска C. Compile the source code to a DLL and copy the DLL to the root directory of your C drive. Затем выполните следующий запрос Transact-SQL Transact-SQL . Then, execute the following Transact-SQL Transact-SQL query.

Оцените статью
ПК Знаток
Добавить комментарий

Adblock
detector