2013-08-01 7 views
0

다른 방법으로 다음 쿼리를 작성할 수 있습니까?SQL에서 변수에 값을 할당하는 다른 방법

ALTER PROC Proc_AssetManagement_SubscriptionCheck @IMEINumber NVARCHAR(100) 
,@PhoneNo NVARCHAR(200) 
,@SIMNo NVARCHAR(100) 
,@Id INT 
,@Message NVARCHAR(MAX) OUTPUT 
AS 
BEGIN 

DECLARE @SimMessage NVARCHAR(200) = '' 
DECLARE @PhoneMessage NVARCHAR(200) = '' 
SET @Message = '' 

SELECT @Message = (
     CASE 
      WHEN COUNT(IMEINumber) > 0 
       THEN ('IMEI Already Exists\n') 
      ELSE ' ' 
      END 
     ) 
FROM tblAssetSubscriptionDetails 
WHERE AssetMgmtId <> @Id 
    AND (IMEINumber = @IMEINumber) 

SELECT @PhoneMessage = (
     CASE 
      WHEN COUNT(PhoneNo) > 0 
       THEN ('PhoneNo Already Exists\n') 
      ELSE ' ' 
      END 
     ) 
FROM tblAssetSubscriptionDetails 
WHERE AssetMgmtId <> @Id 
    AND (PhoneNo = @PhoneNo) 

SELECT @SimMessage = (
     CASE 
      WHEN COUNT(SimNo) > 0 
       THEN ('SimNo Already Exists') 
      ELSE ' ' 
      END 
     ) 
FROM tblAssetSubscriptionDetails 
WHERE AssetMgmtId <> @Id 
    AND (SIMNo = @SIMNo) 

SET @Message = @Message + '' + @PhoneMessage + '' + @SimMessage 
END 

나는 쿼리의 수를 줄이기 위해 3 가지 쿼리가 아닌 단일 쿼리로 메시지를 가져오고 싶습니다. 내가 할 수 있을까? 그렇다면 어떻게? 내 목적은 이런 형태의 메시지를 받고 싶다는 것입니다.

IMEINumber가 테이블에 있으면 IMEI 번호가 이미 존재 함을 나타냅니다. IMEINumber와 함께 테이블에 SIm 번호가있는 경우 이미 존재하는 IMEI 번호가 표시됩니다. \ nSim No가 이미 존재하는 등등 ...

+1

'IMEINumber', 'PhoneNo' 및'SIMNo'은 어떻게 관련이 있습니까? 그것들은 모두 특정 장치 또는 많은 장치와 관련이 있습니까? – jpw

+0

실제로는 특정 장치와 관련이 있습니다. 그리고 내 질문은 IMEINumber, PhoneNo 및 SimNo에만 국한되지 않습니다. 다른 열이 될 수 있습니다. 내가 원하는 건 어떻게 하나의 단일 쿼리에서 병합 된 메시지를 얻을 수 있습니다 그래서 나는 여러 쿼리를 수행 할 필요가 없습니다. –

답변

1

이 것이 귀하의 필요에 맞는 것입니까? (CTE를 사용 :. http://msdn.microsoft.com/en-us/library/ms175972.aspx을 나는 그래서 구문 오류가없는 희망 ++ 메모장에서 부분적으로 썼다.)

열팽창 계수 tASD은 (tblAssetSubscriptionDetails을 의미) 도움이 될 것입니다 행만를 수집합니다. EXISTS은 실제로 모든 것을 계산할 필요가 없으므로 보통 Count() > 0보다 좋습니다.

WITH tASD(AssetMgmtId, IMEINumber, PhoneNo, SIMNo) 
AS 
(
    SELECT AssetMgmtId, IMEINumber, PhoneNo, SIMNo 
    FROM tblAssetSubscriptionDetails 
     WHERE AssetMgmtId <> @Id 
      AND 
      (
       IMEINumber = @IMEINumber 
       OR PhoneNo = @PhoneNo 
       OR SIMNo = @SIMNo 
      ) 

) 
SELECT @Message = (
     CASE 
      WHEN EXISTS (SELECT null FROM tASD WHERE IMEINumber = @IMEINumber) 
       THEN ('IMEI Already Exists\n') 
      ELSE '' 
      END 
     ) 
     + 
     CASE 
      WHEN EXISTS (SELECT null FROM tASD WHERE PhoneNo = @PhoneNo) 
       THEN ('PhoneNo Already Exists\n') 
      ELSE '' 
      END 
     ) 
     + 
     CASE 
      WHEN EXISTS (SELECT null FROM tASD WHERE SIMNo = @SIMNo) 
       THEN ('SimNo Already Exists') 
      ELSE '' 
      END 
     ) 
+0

감사합니다. 내 쿼리가 해결되었습니다 ... –

관련 문제