1
UPDATE  [MyDatabase].[dbo].[Device] 
SET nDeviceTypeID =(SELECT nDeviceTypeID FROM
        DeviceType WHERE sDisplayName =COALESCE (@Role,sDisplayName))
WHERE nDeviceID  IN (SELECT nDeviceID FROM [MyDatabase].[dbo].[AddressList]
WHERE sNetworkAddress LIKE '%' + @NetworkAddress2 + '%')

我有上述更新语句以更新参数时更新单元格。但是,当参数设置为 null 时,更新不会执行,这很好,但与其发回错误消息,我更愿意保留单元格的原始值而不执行任何更新。关于我做错什么或在哪里做错的任何想法?

编辑 1 网络地址参数永远不会为空,所以我只需要确保 @Role 不为空。如果 @Role 为 NULL,我想保留单元格的原始值。

4

3 回答 3

2

试试这个 :

IF (@Role IS NOT NULL AND @NetworkAddress2 IS NOT NULL)
BEGIN

UPDATE  [MyDatabase].[dbo].[Device] 
SET nDeviceTypeID =(SELECT nDeviceTypeID FROM
        DeviceType WHERE sDisplayName =COALESCE (@Role,sDisplayName))
WHERE nDeviceID  IN (SELECT nDeviceID FROM [MyDatabase].[dbo].[AddressList]
WHERE sNetworkAddress LIKE '%' + @NetworkAddress2 + '%')

END
于 2013-05-02T09:24:46.740 回答
1

我解决的方法是我使用了@Anu 的帮助这是我的代码现在的运行方式:

IF(@Role IS NULL AND @Role != 'NULL')
BEGIN ...
于 2013-05-02T11:23:26.637 回答
0

我会将最后一行替换为

WHERE (@NetworkAddress2 IS NOT NULL OR sNetworkAddress LIKE '%' + @NetworkAddress2 + '%'))

[MyDatabase].[dbo].[AddressList]仅当@NetworkAddress2is not时才会选择NULL

于 2013-05-02T09:21:30.980 回答