Я знаю, что использование статической переменной в вашей DLL небезопасно, но есть ли способ получить нечто подобное или переменную, которая существует только для текущего контекста?
То, что я пытаюсь сделать, - это создать UDF, который принимает строку, разделенную запятыми, и возвращает таблицу с двумя столбцами, один - это индекс / порядок значения в исходной строке, другая - сама ценность. Разделить легко (есть много примеров в сети, мой код ниже), но получить заказ кажется невозможным.
Я пытался использовать столбец IDENTITY
, но он не разрешен («Не удается использовать столбец« IDENTITY »в таблице результатов потоковой пользовательской функции»), и использование статической переменной не рекомендуется. идти. В веб-проекте вы получаете System.Web.HttpContext.Current
, есть ли что-нибудь подобное для проекта SQL? Или есть лучший способ сделать то, что я ищу?
SQL
CREATE FUNCTION SplitToInt(@list nvarchar(MAX), @delim nchar(1) = N',')
RETURNS TABLE (Value int)
AS EXTERNAL NAME CompanyName.Functions.SplitToInt
GO
C #
[SqlFunction(FillRowMethodName = "SplitToIntFillRow")]
public static IEnumerable SplitToInt(SqlString str, SqlString separator)
{
return str.Value.Split(!separator.IsNull && separator.Value.Length > 0 ? separator.Value[0] : ',');
}
public static void SplitToIntFillRow(object row, out int Value)
{
Value = System.Convert.ToInt32((string)row);
}