2016-04-01 16 views
-3

Bunun daha önce sorulmuş olduğunu biliyorum, ancak yanıtın benim betiğime özgü olduğunu düşünüyorum. Bu benim ilk defa bir proc oluşturup Tablo Değişkenlerini kullanıyorum. Bir tabloyu oluşturmuyorum ve bir kullanıcı denetimi için bundan GridView üretiyorum. Daha sonra, kullanıcı kontrolündeki onay kutularını almalı ve orijinal tabloyu güncellemeye başladım. İhtiyacım olan son bölüm bu proc oluşturmaktır.Bir koşulun beklendiği bir bağlamda belirtilen boolean olmayan bir ifadenin ifadesi, 'select' seçeneğinin yanında

Bunu yapmanın birkaç yolu olduğundan eminim, ancak bu bir Azure Veri Tabanıdır ve bu seçeneği işe yarar hale getirmek için çok yaklaştım. Her şey yardımcı olabilir.

sayesinde arada

USE [OST] 
GO 

/****** Object: StoredProcedure [mgt].[InsertPageSecurityMapping] Script Date: 3/30/2016 11:30:55 AM ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 


CREATE procedure [mgt].[UpdateAlerts] 
( 
    @pkDistro int 
    ,@intAlerts int 
    ,@vchrCustomer varchar(100) 
) 

as 
begin 

--create a table variable of the unpivoted mgt.tblDistro table 
DECLARE @unpvtDistroTemp TABLE 
(
    pkDistroID int, 
    vchrCustomer varchar(100), 
    intAlerts int 
) 

INSERT INTO @unpvtDistroTemp (pkDistroID, vchrCustomer, intAlerts) 
(
SELECT pkDistroID, vchrCustomer, intAlerts 
FROM 
(SELECT pkDistroID, intComcast, intCableVision, intHearst, intCharter FROM mgt.tblDistro) mtd 
UNPIVOT (intAlerts FOR vchrCustomer IN (intComcast, intCableVision, intHearst, intCharter)) as unpvtTable 
) 

--check to see if the alerts are a 1 or 0 and update the table 
if @intAlerts = 1 
begin 
    UPDATE @unpvtDistroTemp 
    SET intAlerts = 1 
    WHERE pkDistroID = @pkDistro AND @vchrCustomer 
select 1 
end 

if @intAlerts = 0 
begin 
    UPDATE @unpvtDistroTemp 
    set intAlerts = 0 
    WHERE pkDistroID = @pkDistro AND vchrCustomer = @vchrCustomer 
select 0  
end 

UPDATE mgt.TblDistro 
SET @vchrCustomer = (SELECT @vchrCustomer 
    FROM @unpvtDistroTemp 
    PIVOT 
    (MAX(intAlerts) 
    FOR vchrCustomer IN (intComcast, intCableVision, intHearst, intCharter)) as pvtTable 
    WHERE pkDistroID = @pkDistro) 

end 



GO 
+0

, hata UNPIVOT içinde 'SEÇ' etrafında söylüyor. –

+0

WOW! Aptal hata ... İlk IF bildirimde bool yalın ifadesini koymayı unuttum. Gönderi için üzgünüm. –

cevap

0
WHERE pkDistroID = @pkDistro AND vchrCustomer = @vchrCustomer 
+0

Lütfen cevabınızın problemi nasıl çözdüğünü açıklayın, herkesin çözümünüzü daha net ve ileride referans olarak anlamasına yardımcı olacaktır. – Aziz