Массивы в UserDefinedFunctions? - PullRequest
       14

Массивы в UserDefinedFunctions?

0 голосов
/ 28 октября 2009

Я создал пользовательскую функцию с VB.NET и хочу использовать эту функцию в SQLServer. Кажется, все работает нормально.

Теперь я хочу использовать массив в качестве параметра. Возможно ли это?

Пример моего метода испытаний (без параметров):

Partial Public Class UserDefinedFunctions
    <Microsoft.SqlServer.Server.SqlFunction()> _
    Public Shared Function TestFunction() As SqlString
        ' Add your code here
        Return New SqlString("Hello World")
    End Function
End Class

Может кто-нибудь дать мне рабочий пример или какие-нибудь идеи для обхода?

Thanx

Ответы [ 4 ]

1 голос
/ 28 октября 2009

Массивы невозможны. Вместо этого передайте XML (в XML вы можете легко представить массив)

0 голосов
/ 28 октября 2009

SQL Server не знает, что такое массив, поэтому вы не можете передать его в хранимую процедуру или функцию. Существуют альтернативы XML с точки зрения разделения списка, состоящего из строки, для имитации массива. Некоторые идеи:

В SQL Server 2016 или более поздней версии вы должны посмотреть STRING_SPLIT() и STRING_AGG():

0 голосов
/ 28 октября 2009

Проверьте это: это пример того, как использовать xml для эмуляции поддержки массива:

http://ayende.com/Blog/archive/2007/07/10/Sending-arrays-to-SQL-Server-Xml-vs.-Comma-Separated-Values.aspx

Это изюминка для вашего SQL:

DECLARE @ids xml
SET @ids = '<ids>
     <id>ALFKI</id>
     <id>SPLIR</id>
</ids>'
SELECT * FROM Customers
WHERE CustomerID IN (SELECT ParamValues.ID.value('.','NVARCHAR(20)')
FROM @ids .nodes('/ids/id') as ParamValues(ID) )

В вашем коде VB.Net (при условии, что вы работаете с .Net Framework 3.5) вы должны использовать LINQ to XML для генерации XML из вашего массива. Это довольно легко. Вы можете найти вводный пример здесь:

http://blogs.msdn.com/wriju/archive/2008/02/13/linq-to-xml-two-important-classes-xelement-and-xattribute.aspx

0 голосов
/ 28 октября 2009

Вам нужно будет использовать либо строку с разделителями, либо XML, а затем проанализировать параметр в вашей функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...