1

我是 sql azure 的新手。现在我面临一个大问题,这是因为 SQL Azure 联合。在我的一个项目中,我想使用联邦。为此,我想从所有联邦中读取数据。如何检查服务器中的联合总数并从联合中读取数据?还有如何将数据插入联邦?目前我正在使用:

string strSQL = @"SELECT f.name, fmc.federation_id, fmc.member_id, fmc.range_low, fmc.range_high " +
                                                            "FROM sys.federations f " +
                                                            "JOIN sys.federation_member_distributions fmc " +
                                                            "ON f.federation_id=fmc.federation_id " +
                                                            "ORDER BY fmc.federation_id, fmc.range_low, fmc.range_high";
        string strTableName = "federation_member_distributions";

        try
        {
            using (SqlConnection connection = new SqlConnection(csb.ToString()))
            {
                connection.Open();
                sbResults.AppendFormat("-- Open {0}\r\n\r\n", csb.ToString());

                data = new DataSet();
                data.Locale = System.Globalization.CultureInfo.InvariantCulture;

                using (SqlCommand command = connection.CreateCommand())
                {
                    // Connect to federation root or federation member
                    command.CommandText = "USE FEDERATION ROOT WITH RESET";
                    command.ExecuteNonQuery();
                    sbResults.AppendFormat("{0}\r\nGO\r\n", command.CommandText);
                }

                //Retrieve federation root metadata, and populate the data to the DataGridView control
                SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(strSQL, connection);
                sqlDataAdapter.Fill(data, strTableName);
                sbResults.AppendFormat("{0}\r\nGO\r\n", strSQL);
            }

        }
        catch (Exception ex)
        {

        }

但它不起作用

4

2 回答 2

3

对于上述问题,您确实需要查看这些有关如何使用 SQL Azure 联合的文章:

SQL Azure 中联合的扇出查询简介(第 1 部分):多个联合成员的可扩展查询,MapReduce 风格!

您可以在上面找到Fanout 示例工具,其中包含向您展示如何从联邦获取数据的代码。

此示例的第二部分“ SQL Azure 中联合的扇出查询(第 2 部分):具有 TOP、ORDER BY、DISTINCT 和其他强大聚合的可扩展扇出查询,MapReduce 样式! ”展示了如何运行扇出带有特定示例的查询。

试试上面的示例,如果您遇到任何问题,请告诉我们。

于 2012-06-04T16:28:44.820 回答
3

我与 SQL Azure 团队的 Cihan Biyikoglu 进行了讨论,以下是他的建议:

这个想法是,您不必使用联邦缓存数据所在位置的“地图”,因此您不必这样做;

这是伪应用程序代码和执行扇出的实际示例;您也可以在此 UI 中试用代码。

http://federationsutility-seasia.cloudapp.net/About.aspx

Start at the 
@i=MIN_VALUE (of the data_type or federation key like customerID=-1)
While (@i not null)
{
 Try
 {
    -- switch to the next member
    USE FEDERATION fedname(id=@i)...

    -- Run your transaction here for this member 
    SELECT * FROM table join other_table … WHERE fedkeycolumn >= @i group by … order by …

    -- grab the next value
    SELECT @i=range_high FROM sys.federation_member_distributions 
 }
 Catch ()
 {
           If retry_count < total_retries
                          Exit the loop
 }
}

如果您仍然想找出成员,您可以随时在包含联邦的数据库中运行查询;

Select * from sys.federation_member_distributions fmd join sys.federations f on fmd.federation_id=f.federation_id 

这种方法的问题是,如果在读取信息和完成查询处理之间存在间隔,您可能会错过读取数据。

上面没有缓存“地图”的方法不容易出现这个问题。无论任何重新分区操作如何,它都会捕获所有成员。

于 2012-06-05T23:08:17.833 回答