0

我可以用其他方式编写以下查询吗?

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 号码已经存在。如果在表格中找到 SIM 号和 IMEI 号,则显示 IMEI 号已存在\nSIM 号已存在,依此类推...

4

1 回答 1

1

这符合您的需要吗?(使用 CTE:。http://msdn.microsoft.com/en-us/library/ms175972.aspx我在 Notepad++ 中部分编写了它,所以我希望没有语法错误。)

CTE 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
        )
于 2013-08-01T08:59:38.430 回答