Можно ли переписать хранимую процедуру sql как код с #?

У меня есть хранимая процедура sql в моей базе данных. В этой хранимой процедуре вызывается функция SQLCLR. Но я хочу перейти в облако Azure, которое не поддерживает SQLCLR. Поэтому мне нужно избавиться от этой хранимой процедуры sql.

CREATE PROCEDURE [dbo].[ProcessCampaignRecipients]
AS
BEGIN
    DECLARE @Campaigns TABLE (RowNumber INT IDENTITY(1,1),CampaignID INT, OwnerID INT, IsProcessed BIT, AccountID INT) 
    DECLARE @campaignsCount INT

    INSERT INTO @Campaigns
    SELECT CampaignID, CreatedBy,0, AccountID FROM Campaigns C (NOLOCK) WHERE C.IsDeleted = 0  AND C.ScheduleTime < GETUTCDATE() AND C.CampaignStatusID IN (102,106) AND (C.IsRecipientsProcessed = 0 or C.IsRecipientsProcessed is null) ORDER BY C.ScheduleTime 
ASC
    SELECT @campaignsCount = (SELECT COUNT(*) from @Campaigns)

    DECLARE @RowNumber INT = 1


    WHILE  @RowNumber <= @campaignsCount
    BEGIN
        DECLARE @DeleteCounter INT = 5000
        DECLARE @CampaignID INT 
        DECLARE @OwnerID INT
        DECLARE @AccountID INT
        DECLARE @SSContacts dbo.Contact_List
        DECLARE @serviceUri VARCHAR (1024)
        DECLARE @processResponse VARCHAR (1024)
        DECLARE @isPrivate BIT
        DECLARE @ssContactsCount INT
        DECLARE @deleteIterations INT


        SELECT @CampaignID = CampaignID, @OwnerID = OwnerID,@AccountID=AccountID FROM @Campaigns WHERE RowNumber = @RowNumber --order by CampaignID OFFSET 1 rows fetch next 1 rows only
        SELECT @isPrivate= ISNULL((select top 1 IsPrivate from AccountDataAccessPermissions where accountid = @AccountID and ModuleID = 3),0)
        SELECT @processResponse = ''
        SELECT @OwnerID = 
            CASE @isPrivate 
                WHEN  0 THEN  0 
                WHEN 1 THEN @OwnerID    
            END 

        SELECT @serviceUri = Value FROM EnvironmentSettings (nolock) WHERE Name = 'SmarttouchServiceUri'

        BEGIN TRY           

              INSERT INTO  SSCONTACTS_NEW ([CampaignID],[ContactID],[MomentaryRecipientID])
              SELECT    [CampaignID],[ContactID],[MomentaryRecipientID] FROM  [dbo].[MomentaryCampaignRecipients] (NOLOCK) WHERE campaignid = @CampaignID

            print cast(@CampaignID as varchar(200))
            EXEC dbo.HandleNextCampaign @CampaignID, @OwnerID , @SSContacts
            UPDATE Campaigns SET IsRecipientsProcessed = 1 WHERE CampaignID = @CampaignID
            DELETE @SSContacts
        END TRY
        BEGIN CATCH     
            UPDATE Campaigns SET CampaignStatusID = 110, IsRecipientsProcessed=0, Remarks = ERROR_MESSAGE(), ProcessedDate = GETUTCDATE() WHERE CampaignID = @CampaignID
        END CATCH


        WHILE @DeleteCounter = 5000
        BEGIN
            DELETE TOP(5000) FROM MomentaryCampaignRecipients WHERE CampaignID = @CampaignID
            SET @DeleteCounter = @@ROWCOUNT
        END

        UPDATE @Campaigns SET IsProcessed = 1 WHERE RowNumber = @RowNumber      
        SET @RowNumber = @RowNumber + 1     
    END
END

Мне нужно переписать его как код C#. Я новичок в SQL, поэтому не знаю, возможно ли это?

Это невозможно. Вы должны прочитать код sql и понять логику. Тогда вы должны написать код

DLL_Whisperer 01.08.2018 10:19

Я уверен, что вы можете сделать что-то подобное, поэтому ответ - да. Следующий вопрос? Однако в нынешнем виде этот вопрос слишком широкий и не совсем подходит для Stackoverflow.

TheGeneral 01.08.2018 10:21

Вам также нужно будет либо вызвать хранимую процедуру dbo.HandleNextCampaign, либо переписать ее тоже.

Rafalon 01.08.2018 10:27

«Эта хранимая процедура вызывает хранимую процедуру CLR, а хранимые процедуры CLR не разрешены. Поэтому мне нужно заменить хранимую процедуру это»? Разве не правильная реакция «Следовательно, мне нужно заменить хранимую процедуру CLR»?

Damien_The_Unbeliever 01.08.2018 10:30

Да, ты можешь. На самом деле эта хранимая процедура выполняет "dbo.HandleNextCampaign" и вставляет завершенные задачи - [CampaignID], [ContactID], [MomentaryRecipientID] в таблицу SSCONTACTS_NEW (в случае успеха). Вы можете воссоздать этот процесс с помощью таблицы данных C#, используя пространство имен: System.Data. Просто создайте петлю и добавьте их.

MEdwin 01.08.2018 10:32

Да. Вы должны понять и отработать логику в C#, однако с точки зрения производительности это плохой выбор. Проверь это

IteratioN7T 01.08.2018 10:35

я сбит с толку. Вы хотите переписать код SQLCLR как Stored Procedure или Stored Procedure как C#?

Squirrel 01.08.2018 10:56

Сохраненная процедура как C#

mic kos 01.08.2018 10:59

Разве SQLCLR не является способом использования .net на SQL Server? Кажется, что процедура находится в TSQL, а не в .net. Вам вообще понадобится SQLCLR, и сможете ли вы запустить SQL в Azure в любом случае?

Cato 01.08.2018 11:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
9
177
0

Другие вопросы по теме