C# SQL CLR访问临时表
我是SQL CLR新手,我将使用它来反转地理代码临时表结果 计划的情景将是 为报表结果创建临时表的存储过程 调用SQL CLR函数,该函数将从临时表结果填充Datatable 我会做反向地理编码反向地理编码功能 已实施且运行良好,并为位置填充新列 这个数据表 将Datatable作为新的临时表返回到存储过程,以便 加入结果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中调用它:
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上编写的系列文章:请注意:该站点需要免费注册才能阅读文章。我需要将其作为批处理,以便同时处理多行,我想您的代码将使每行都能独立运行感谢您的回复,但正如你所说,这有点令人困惑,听起来很清楚,你有我的问题,我会尝试一下