gpt4 book ai didi

c# - SQL CLR - 当前上下文的 "Static"变量

转载 作者:行者123 更新时间:2023-11-30 18:00:58 24 4
gpt4 key购买 nike

我知道在你的 DLL 中使用静态变量是不安全的,但有没有什么办法可以有类似的东西,或者只存在于当前上下文的变量?

我想做的是创建一个 UDF,它采用逗号分隔的字符串,并返回一个包含列的表,其中一个是原始字符串中值的索引/顺序,另一个是值(value)本身。拆分很容易(网上有很多例子,下面是我的代码),但要获得顺序似乎是不可能的。

我试过使用 IDENTITY 列,但它们是不允许的(“不能在流式用户定义函数的结果表中使用‘IDENTITY’列”),并使用静态vaiable 是不行的。在 web 项目中,你得到 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);
}

最佳答案

我的解决方案(有趣的是如何把事情写下来,走开,然后回来让你看到显而易见的东西)

SQL

CREATE FUNCTION SplitToInt(@list nvarchar(max), @separator nchar(1) = N',')
RETURNS TABLE (InLevelOrder int, Value int)
AS EXTERNAL NAME CompanyName.Functions.SplitToInt
GO

C#

[SqlFunction(FillRowMethodName = "SplitToIntFillRow")]
public static IEnumerable SplitToInt(SqlString str, SqlString separator)
{
var s = str.Value.Split(!separator.IsNull && separator.Value.Length > 0 ? separator.Value[0] : ',');
var rtn = new List<int[]>(s.Length);
for (int i = 0; i < s.Length; i++)
rtn.Add(new[] { i, System.Convert.ToInt32(s[i]) });
return rtn;
}

public static void SplitToIntFillRow(object row, out int InLevelOrder, out int Value)
{
InLevelOrder = ((int[])row)[0];
Value = ((int[])row)[1];
}

如果有人可以对此进行改进,请随时发表评论。

关于c# - SQL CLR - 当前上下文的 "Static"变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9566666/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com