C# SQL CLR访问临时表

C# SQL CLR访问临时表,c#,sql-server,tsql,sqlclr,C#,Sql Server,Tsql,Sqlclr,我是SQL CLR新手,我将使用它来反转地理代码临时表结果 计划的情景将是 为报表结果创建临时表的存储过程 调用SQL CLR函数,该函数将从临时表结果填充Datatable 我会做反向地理编码反向地理编码功能 已实施且运行良好,并为位置填充新列 这个数据表 将Datatable作为新的临时表返回到存储过程,以便 加入结果 那么如何从SQL CLR访问临时表呢?如果是我,我会将其作为一个表值函数编写,该函数以纬度和经度为例,并返回地址,如果我误解了,则返回地址。然后,您可以这样在SQL中调用它:

我是SQL CLR新手,我将使用它来反转地理代码临时表结果

计划的情景将是

为报表结果创建临时表的存储过程 调用SQL CLR函数,该函数将从临时表结果填充Datatable 我会做反向地理编码反向地理编码功能 已实施且运行良好,并为位置填充新列 这个数据表 将Datatable作为新的临时表返回到存储过程,以便 加入结果
那么如何从SQL CLR访问临时表呢?

如果是我,我会将其作为一个表值函数编写,该函数以纬度和经度为例,并返回地址,如果我误解了,则返回地址。然后,您可以这样在SQL中调用它:

insert into #t (Address)
select clr.Address
from dbo.yourTable
cross apply dbo.yourCLRFunction(latitude, longitude) as clr

在这一点上,函数根本不需要访问表,因为所有数据都将传递给/通过它。

这有点令人困惑,但听起来您想从本地临时表(即TableName)读取数据,以便传入一组值。在这种情况下,如果对连接字符串使用Context Connection=true,则可以从SQLCLR对象中的本地临时表中进行选择

如果这将是一个表值函数TVF,那么它应该将数据表中的行作为结果集传回。当然,在两个方向上都不需要使用数据表。在读取下一个输入行之前,可以处理每个输入行并在读入时将其传回:

ResultsStruct _ResultSet = new ResultsStruct();

using (SqlConnection _Connection = new SqlConnection("Context Connection = true"))
{
  using (SqlCommand _Command = _Connection.CreateCommand())
  {
    _Command.CommandText = "SELECT Column1, Column2 FROM #ValuesToPassIn;";
    _Connection.Open();

    using (SqlDataReader _Reader = new _Command.ExecuteReader())
    {
      while(_Reader.Read())
      {
        var1 = _Reader.GetInt32(0);
        var2 = _Reader.GetInt32(1);

        ProcessStuff(var1, var2);

        _ResultSet.SetString(0, something1);
        _ResultSet.SetSomething(1, something2);

        yield return _ResultSet;
      }
    }
  }
}
T-SQL存储过程的一般结构为:

创建表ValuesToPassIn 第1列数据类型, 第2列数据类型, ... ; 在第1列、第2列中插入值StoPass。。。 值val1a、val2a、…、val1b、val2b、。。。; 创建表值回显 列数据类型, ColumnB数据类型, ... ; 插入值回显列A、列B。。。 选择ResultField1、ResultField2。。。 来自dbo.SqlClrTableValuedFunction; 或者,要在中传递值集,可以将它们作为XML发送:

在XML中声明@ValuesToPassIn; 设置@ValuesToPassIn=N'…'; 创建表值回显 列数据类型, ColumnB数据类型, ... ; 插入值回显列A、列B。。。 选择ResultField1、ResultField2。。。 来自dbo。SqlClrTableValuedFunction@ValuesToPassIn;
有关使用SQLCLR的更多信息/详细信息,请参阅我在SQL Server Central上编写的系列文章:请注意:该站点需要免费注册才能阅读文章。

我需要将其作为批处理,以便同时处理多行,我想您的代码将使每行都能独立运行感谢您的回复,但正如你所说,这有点令人困惑,听起来很清楚,你有我的问题,我会尝试一下