У кого-то есть пример, как сделать вставку CLR в SQL Server 2008? - PullRequest
1 голос
/ 27 августа 2011

Я здесь новичок, и английский не является моим родным языком, поэтому я надеюсь, что вы, ребята, понимаете меня.

Может кто-нибудь дать мне пример того, как создать функцию, которая создает таблицу с даннымииз результата вложенных циклов.

Я пытаюсь сделать функцию SQL CLR в C # для создания таблицы со всеми комбинациями для лотереи, у меня есть следующий код паскаля:

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 ++), создающий текст со всеми комбинациями, вот мой код:

#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;
    }

Затем я могу импортировать эти данные для SQL, используя DTS, моя цель - иметь CLR для выполнения всей работы в SQL и может уменьшить таблицу комбинаций для быстрой загрузки базы данных и быстрого перестроения с помощью вызова функциикод C ++ как DLL (или, другими словами, используя CLR).Другое дело, что я буду работать над этой таблицей комбинаций, выполняя много поисков («Выбор», который я буду делать, используя TSQL и отправляя результат для массива в C #), и, конечно, у меня есть все результаты лотереи для поисковых данных, в обоих случаях(комбинации и результаты) Мне нужно будет использовать массивы для моего исследования, это еще один момент для работы с CLR, я помню много вещей из C ++ с тех пор, как я учился в университете, и, по моему мнению, довольно легко и быстро работать сC # вместо этого использовать курсоры TSQL для моей цели.Моя идея состоит в том, чтобы создать базу данных SQL с процедурами C # и TSQL, чтобы дать мне лучшие и самые быстрые подсказки, чтобы играть в лотерею, тратя около 50,00 долларов США в неделю, первая книга, которую я читаю:

Какчтобы выиграть в лотерею от Гэйл Ховард

Не знаю, как правильно назвать по-английски.

Я буду использовать многие другие системы из блогов и веб-сайтов, но только те, которые я могу понять, для меня, нет смысла создавать программы, использующие сложные формулы, которые я не могу понять.

Спасибо за все ответы, и я буду продолжать пытаться заставить CLR работать на меня, вместо этого мне нужно каждый раз использовать DTS для экспорта и импорта данных, иОгромное спасибо Мартину Смиту за то, что он показал мне, как можно имитировать вложенный цикл while внутри MSSQL, у меня возникла проблема с памятью типа (на моем ноутбуке MSSQL использует 2048 МБ свободной оперативной памяти для SQL):

Произошла ошибка при выполнении пакета.Сообщение об ошибке: Exceção do tipo 'System.OutOfMemoryException' foi acionada.

Но до того, как ошибка сработала довольно хорошо, я уверен, что вопрос в экзаменах Microsoft SQL спросит, является ли вложенныйвозможна петля, я отвечу на вашем примере; -p

1 Ответ

5 голосов
/ 27 августа 2011

Просто для краткого решения вопроса в заголовке есть пример использования процедуры CLR для выполнения INSERT на MSDN здесь .

Однако, прочитав мотивацию для этого конкретного вопроса, просто отметим сначала, что вы можете вкладывать 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

NB. Если вы посмотрите на план выполнения этого, вы увидите, что SQL Server действительно написал для вас программу с вложенными циклами.

Plan

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...