-1

У меня есть куча скриптов (SQL команд) вот что я хотел бы использовать в качестве хранимой процедуры .. Кто-нибудь может помочь ..Преобразовать этот SQL sript в хранимой процедуре

причина, почему я хочу, чтобы преобразовать этот сценарий для удобства использования в моем запросе веб-приложения.

/* 1. Select all the duplicates */ 
    SELECT 
     [PTAID] 
     ,[RequestID] 
     ,[RequestDate] 
     ,[ProvName] 
     ,[Amount] 
     ,[INorOUT] 
     ,[Supplier] 
     ,[Customer] 
     ,[Program] 
     ,[IssueDesc] 
     ,[Chargeable] 
     , COUNT(*) as [Count] 
FROM [PFTracking].[dbo].[TempTable] 
GROUP BY 
    [PTAID],[RequestID] 
     ,[RequestDate] 
     ,[ProvName] 
     ,[Amount] 
     ,[INorOUT] 
     ,[Supplier] 
     ,[Customer] 
     ,[Program] 
     ,[IssueDesc] 
     ,[Chargeable] 
HAVING 
    COUNT(*) > 1 

    --2. Add Temp Column 

alter table [PFTracking].[dbo].[TempTable] 
    add sno int identity(1,1) 

    -- 3. Remove duplicates 

    delete from [PFTracking].[dbo].[TempTable] 
    where sno in(select sno 
    from (
    select *,RANK() 
    OVER (PARTITION BY [PTAID],[RequestID] 
     ,[RequestDate] 
     ,[ProvName] 
     ,[Amount] 
     ,[INorOUT] 
     ,[Supplier] 
     ,[Customer] 
     ,[Program] 
     ,[IssueDesc] 
     ,[Chargeable] ORDER BY sno DESC)rank 
    From [PFTracking].[dbo].[TempTable])T 
    where rank>1) 
    alter table [PFTracking].[dbo].[TempTable] drop column sno 

И может ли кто-нибудь помочь мне, как вызвать эту хранимую процедуру в веб-приложении ASP.NET?

Дополнительно:

if not exists(select * from sys.servers where name=N'CNCTC-WEB01') 
begin 

exec sp_addlinkedserver @server='CNCTC-WEB01' 

exec sp_addlinkedsrvlogin 'CNCTC-WEB01','false',null,'svc_Phils','[email protected]' 

end 

INSERT INTO [PFTracking].[dbo].[TempTable] 
SELECT 
    c.[pf_id] 
    ,a.[RequestDate] 
    ,c.[pf_carrierUsed] 
    ,b.[PiecePrice] * b.[PartQuantity] as [Amount] 
    ,c.[pf_type] 
    ,c.[pf_resSupplier] 
    ,c.[pf_resCustomer] 
    ,c.[pf_trailerNum] 
    ,b.[PartDesc] 
    ,c.[pf_chargeBack] 
    ,c.[pf_chargetoPlant] 
FROM [CNCTC-WEB01].[NOP_PR].[dbo].[Requests] a 
    JOIN [CNCTC-WEB01].[NOP_PR].[dbo].[Parts] b on a.[RequestID] = b.[RequestID] 
    JOIN [PHRIZ-WEBAPP01].[PFTracking].[dbo].[Tbl_PFExcel] c on b.[PartNumber] like '%'+c.pf_id+'%' 
where a.[EntityName] like '%PTA' 
AND a.[RequestDate] between '2015-04-20 00:00:00.000' AND GETDATE() 
+2

Шаг # 1 дочитал SPROCs - когда/где они полезны, и как их создавать, и т.д. Вы хотите удалить DDL (изменить таблицу), если это возможно. В этом случае было бы лучше всего полностью исключить таблицу temp (или «column»), но это не имеет ничего общего с «преобразованием в хранимую процедуру». – user2864740

+0

Вы хотите удалить дубликат? –

+0

@wewesthemenace .. Да .. Я хочу удалить дубликат .. Я имею в виду, что это идея сценария, который я хотел сделать. – Anaiah

ответ

1

Вам не нужно, чтобы создать временную таблицу и добавить временную колонку для удаления дубликатов. Будет выполнен один запрос. Вот как сделать это с помощью CTE:

CREATE PROCEDURE RemoveDuplicatesTempTable 
AS 
BEGIN 

SET NOCOUNT ON; 

WITH Cte AS(
    SELECT *, 
     RN = RANK() OVER (
       PARTITION BY 
        [PTAID] 
        ,[RequestID] 
        ,[RequestDate] 
        ,[ProvName] 
        ,[Amount] 
        ,[INorOUT] 
        ,[Supplier] 
        ,[Customer] 
        ,[Program] 
        ,[IssueDesc] 
        ,[Chargeable] 
       ORDER BY sno DESC) 
    From [PFTracking].[dbo].[TempTable] 
) 
DELETE FROM Cte WHERE RN > 1 

END 

Вы можете прочитать больше о хранимой процедуре here.

Для вызова хранимой процедуры из вас ASP.Net приложение:

using (SqlConnection con = new SqlConnection(_connectionString)) 
{ 
    using (SqlCommand cmd = new SqlCommand("RemoveDuplicatesTempTable", con)) 
    { 
     cmd.CommandType = CommandType.StoredProcedure; 

     con.Open(); 
     cmd.ExecuteNonQuery(); 
    } 
} 
+0

Я добавил несколько кодов .. может помочь мне преобразовать его к хранимой процедуре тоже? – Anaiah

+0

Просто следуйте шаблону, прочитайте статью, указанную в моем ответе. –