Wis*_*own 1 c# sqlclr insert visual-studio-2010 sql-server-2008
我是新来的,英语不是我的母语,所以我希望你们能理解我.
有人能给我一个例子,说明如何创建一个函数来创建一个包含嵌套循环结果数据的表.
我正在尝试在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.
Run Code Online (Sandbox Code Playgroud)
仅使用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;
}
Run Code Online (Sandbox Code Playgroud)
然后我可以使用DTS为SQL导入这些数据,我的目标是有一个CLR用于在SQL中完成所有工作,并且可以缩小组合表以快速上传数据库并使用调用C++代码作为DLL的函数快速重建(或者换句话说,使用CLR).另一点是我将在这个组合表上进行多次搜索(选择我将使用TSQL并将结果发送到C#中的数组),并且在场景中我也有搜索数据的所有结果,在这两种情况下(组合和结果)我将需要使用数组来进行我的研究,这是与CLR合作的另一个点,我记得很多来自C++的东西,当我在大学时,我的意见很简单快速的工作C#而不是使用TSQL游标来实现我的目标.我的想法是用C#和TSQL程序做SQL数据库给我最好和最快的提示,每周大约50美元的彩票消费,我读的第一本书是:
盖尔霍华德如何赢得彩票
Dunno英文名称正确.
我将使用博客和网站中的许多其他系统,但只有我能理解的系统,对我来说,没有必要使用我无法理解的复杂公式制作程序.
感谢所有的答案,我会继续尝试让CLR为我工作,而不是每次都需要使用DTS导出和导入数据,非常感谢Martin Smith向我展示如何在MSSQL中模拟嵌套的while循环,我的内存有问题(我的笔记本电脑有MSSQL使用2048 MB可用内存到SQL):
执行批处理时发生错误.错误信息是:Exceçãodotipo'System.OutOfMemoryException'foi acionada.
但是在错误工作之前,我很确定,如果Microsoft SQL考试中的一个问题询问是否可能出现嵌套循环,我将回答您的示例;-p
只是简单谈谈在标题有使用CLR过程做一个示例问题INSERTMSDN上这里.
但是,已经阅读了这个特定问题的动机,首先要指出你可以WHILE在TSQL中嵌套循环.
但这并不是实现目标的有效方式.您需要一个包含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
Run Code Online (Sandbox Code Playgroud)
注意:如果您查看执行计划,您将看到SQL Server确实为您编写了一个嵌套循环程序.