C# 是否可以将sql存储过程重写为c代码?

C# 是否可以将sql存储过程重写为c代码?,c#,sql,sql-server,tsql,stored-procedures,C#,Sql,Sql Server,Tsql,Stored Procedures,我的数据库中有sql存储过程。在此存储过程中调用SQLCLR函数。但我想在不支持SQLCLR的Azure云上迁移。所以我需要去掉这个sql存储过程 CREATE PROCEDURE [dbo].[ProcessCampaignRecipients] AS BEGIN DECLARE @Campaigns TABLE (RowNumber INT IDENTITY(1,1),CampaignID INT, OwnerID INT, IsProcessed BIT, AccountID IN

我的数据库中有sql存储过程。在此存储过程中调用SQLCLR函数。但我想在不支持SQLCLR的Azure云上迁移。所以我需要去掉这个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代码并理解其逻辑。然后你应该写代码,我相信你可以做类似的事情,所以答案是肯定的。下一个问题?但是,就目前情况而言,这个问题太广泛,不太适合StackOverflow。您还需要调用dbo.HandleNextCampaign存储过程,或者重写它。如果存储过程调用CLR存储过程,则不允许使用CLR存储过程。因此我需要替换这个存储过程吗?这不是正确的反应,因此我需要替换CLR存储过程吗?是的,可以。此存储过程实际执行的是dbo.HandleNextCampaign,如果成功,则将已完成的任务-[CampaignID]、[ContactID]、[InstantilyRecipientId]插入到SSCONTACTS\u新表中。通过利用命名空间System.Data,可以使用C DataTable重新创建此过程。只需创建一个循环并添加它们。