c# - 有人举例说明如何在 SQL Server 2008 中插入 CLR?

标签 c# visual-studio-2010 sql-server-2008 insert sqlclr

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

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

我正在尝试在 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 示例,但其中大部分都不起作用,而且非常困惑。

附录 08/29/2011

我现在也在学习这个网站是如何工作的,很抱歉,如果我不能对这个问题做一个附录,我只在主要问题中看到编辑选项

我有一个工作的 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++ 的很多东西,在我看来,使用它非常容易和快速C# 而不是使用 TSQL 游标来实现我的目标。 我的想法是用 C# 和 TSQL 过程做 SQL 数据库,给我最好和最快的提示来玩彩票,每周花费大约 50,00 美元,我读的第一本书是:

盖尔·霍华德如何中彩票

不知道正确的英文名称。

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

感谢所有的回答,我会继续尝试让 CLR 为我工作,而不是每次都需要使用 DTS 来导出和导入数据,非常感谢 Martin Smith 告诉我如何模拟嵌套的 while 循环MSSQL,我遇到了内存问题(我的笔记本电脑有 MSSQL,使用 2048 MB 空闲 RAM 到 SQL):

An error occurred while executing batch. Error message is: Exceção do tipo 'System.OutOfMemoryException' foi acionada.

但在错误发生之前,我很确定如果 Microsoft SQL 考试中出现询问是否可能出现嵌套循环的问题,我会用你的例子来回答;-p

最佳答案

为了简单地解决标题中的问题,在 MSDN here 上有一个使用 CLR 过程执行 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 确实有效地为您编写了一个嵌套循环程序。

Plan

关于c# - 有人举例说明如何在 SQL Server 2008 中插入 CLR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7213105/

相关文章:

c# - 开源即时通讯工具?

c# - 启动 Internet Explorer 进行调试

sql-server - DBCC SHRINKFILE 截断事务日志

sql-server-2008 - 如何有条件地隐藏 Reporting Services 报表中的页眉

c++ - MSVC 并发运行时中的 parallel_for_each 和 parallel_for 有什么区别?

sql - Join 中的用例语句

c# - 如何在javascript中获取 session [""]值?

c# - 找不到文件 ..\bin\Debug\content.dat

c# - 更新了 web api 的验证示例

C# 程序更新