我是新来的,英语不是我的母语,所以我希望你们能理解我。

有人可以给我一个例子,说明如何使函数使用嵌套循环结果中的数据创建表。

我正在尝试在C#中执行SQL CLR函数,以创建具有彩票游戏所有组合的表格,我有以下pascal代码:

program lotery;
uses fdelay, crt;
var
   x,y,z,a,b,c:integer;
   cont:longint;
begin
     clrscr;
     x:=0;
     y:=0;
     z:=0;
     a:=0;
     b:=0;
     c:=0;
     cont:=0;
     for x:=0 to 59 do
         begin
              for y:=x+1 to 59 do
              begin
                   for z:=y+1 to 59 do
                   begin
                        for a:=z+1 to 59 do
                        begin
                             for b:=a+1 to 59 do
                             begin
                                  for c:=b+1 to 59 do
                                  begin
                                       cont:=cont+1;
               Writeln ('Dezenas: ',x,' - ',y,' - ',z,' - ',a,' - ',b,' - ',c,' = Total de Dezenas: ',cont);
                                  end;
                             end;
                        end;
                   end;
              end;
         end;
readkey;
end.


我仅使用T-SQL注意到,我不能在另一个while内使用while进行嵌套循环。所以我正在尝试执行SQL CLR函数,但是我不知道从哪里开始。

我正在使用SQL Server 2008和Visual Studio 2010。

我正在阅读MSDN示例,但是大多数示例都行不通,而且令人困惑。

附录2011年08月29日

我现在也正在学习这个网站的工作方式,所以抱歉,如果我不能对此问题做附录,我只会在主要问题中看到编辑选项

我有一个工作正常的C ++(我使用DEV C ++编译的)代码,结合所有内容制作了txt,这是我的代码:

#include <iostream>
#include <fstream>

using namespace std;

int main()
    {

        ofstream myfile;
        myfile.open ("Combinacoes.txt");

        int total = 0;

        for (int contador = 1; contador <= 60; contador++)
            for (int Bola_01 = 1; Bola_01 <= 60; Bola_01++)
                for (int Bola_02 = 1; Bola_02 <= 60; Bola_02++)
                    for (int Bola_03 = 1; Bola_03 <= 60; Bola_03++)
                        for (int Bola_04 = 1; Bola_04 <= 60; Bola_04++)
                            for (int Bola_05 = 1; Bola_05 <= 60; Bola_05++)
                                for (int Bola_06 = 1; Bola_06 <= 60; Bola_06++)
                                    {
                                    total = Bola_01 + Bola_02 + Bola_03 + Bola_04 + Bola_05 + Bola_06;
                                    myfile << Bola_01 << "," << Bola_02 << "," << Bola_03 << "," << Bola_04 << "," << Bola_05 << "," << Bola_06 << "," << total << endl;
//                                  printf ("%d , %d , %d , %d , %d , %d , %d \n", Bola_01, Bola_02, Bola_03, Bola_04, Bola_05, Bola_06, total);
                                    total = 0;
                                    }
        return 0;
    }


然后,我可以使用DTS为SQL导入此数据,我的目标是使用CLR来完成SQL中的所有工作,并可以缩小组合表以快速上载数据库,并使用将C ++代码称为DLL的函数快速重建(或换句话说就是使用CLR)。
另一点是,我将在此组合表上进行很多搜索(“选择”将使用TSQL并在C#中将数组的结果发送给我),当然,在两种情况下,我也都会获得彩票的所有结果(组合和结果)我将需要使用数组来进行研究,这是使用CLR的另一点,我还记得上大学时从C ++中学到的许多知识,并且我的观点是,使用CLR可以非常轻松,快速地进行。 C#代替TSQL游标实现我的目标。
我的想法是将SQL数据库与C#和TSQL过程一起使用,以为我提供最好和最快的提示,让他们每周大约花费50,00美元参加彩票活动,我读的第一本书是:

盖尔·霍华德(Gail Howard)

Dunno是英文的正确名称。

我还将使用博客和网站上的许多其他系统,但只有我能理解的系统,对我而言,使用我无法理解的复杂公式编写程序毫无意义。

感谢所有答案,我将继续尝试让CLR为我工作,而不是每次都需要使用DTS导出和导入数据,并非常感谢Martin Smith向我展示了如何在MSSQL内部模拟嵌套的while循环,我遇到了内存问题,例如(我的笔记本电脑的MSSQL使用2048 MB的可用RAM转换为SQL):


  执行批处理时发生错误。错误消息是:严重提示“ System.OutOfMemoryException”。


但是在错误正常运行之前,而且我很确定Microsoft SQL考试中的一个问题是否询问是否可能出现嵌套循环,我将用您的示例进行回答; -p

最佳答案

只是为了简短地解决标题中的问题,有一个使用CLR过程在MSDN here上执行INSERT的示例。

但是,在阅读了此特定问题的动机后,首先要指出的是,您可以在TSQL中嵌套WHILE循环。

但是,这不是实现目标的有效方法。您需要一个包含59个数字的数字表,然后将其连接6次以基于集合的方式进行操作。

假设每个球只能出现一次且顺序不重要,则

/*Table to Hold the Number Combinations*/
CREATE TABLE dbo.LotteryNumbers
    (
      Number1 INT NOT NULL ,
      Number2 INT NOT NULL ,
      Number3 INT NOT NULL ,
      Number4 INT NOT NULL ,
      Number5 INT NOT NULL ,
      Number6 INT NOT NULL ,
      CONSTRAINT PK_LotteryNumbers PRIMARY KEY CLUSTERED
        ( Number1, Number2, Number3, Number4, Number5, Number6 )
    )


/*Create helper table to hold the ball numbers*/
DECLARE @Balls TABLE ( N INT PRIMARY KEY )

 ;WITH E00(N) AS (SELECT 1 UNION ALL SELECT 1),
        E02(N) AS (SELECT 1 FROM E00 a, E00 b),
        E04(N) AS (SELECT 1 FROM E02 a, E02 b),
        E08(N) AS (SELECT 1 FROM E04 a, E04 b)

    INSERT  INTO @Balls( N )
            SELECT TOP 59
                    ROW_NUMBER() OVER ( ORDER BY N )
            FROM    E08

  /*Populate the table of lottery numbers*/
INSERT  INTO dbo.LotteryNumbers
        SELECT  T1.N ,
                T2.N ,
                T3.N ,
                T4.N ,
                T5.N ,
                T6.N
        FROM    @Balls T1
                JOIN @Balls T2 ON T1.N < T2.N
                JOIN @Balls T3 ON T2.N < T3.N
                JOIN @Balls T4 ON T3.N < T4.N
                JOIN @Balls T5 ON T4.N < T5.N
                JOIN @Balls T6 ON T5.N < T6.N


注意:如果您查看执行计划,您会发现SQL Server确实为您有效地编写了一个嵌套循环程序。

c# - 有人举了一个例子,如何在SQL Server 2008中进行CLR插入?-LMLPHP

10-04 12:09
查看更多