【发布时间】:2016-03-22 23:26:35
【问题描述】:
我遇到了一个小问题,让我有些悲伤。在我看来合乎逻辑的事情对我不利。
我允许用户“批量更新”记录并赋予他们更改一条数据或全部数据的能力。
如果用户在totalLeaders 字段中输入整数,例如 1,它会很好地更新值。
如果用户将该字段留空,它会将其转换为 null 并跳过该更新而保留其当前值。
但是,如果我在该字段中传递0 表示不会训练任何领导者,它会说它是一个空值并且不执行IF 语句。
我希望<totalLeaders>0</totalLeaders> 不会被视为空值并执行IF 语句。我还希望 <totalLeaders></totalLeaders> 被视为 NULL 值,NOT 执行 IF 语句。
有什么想法吗??
DECLARE @totalTrainingTime INT;
DECLARE @totalTeammates INT;
DECLARE @totalLeaders INT;
DECLARE @xml XML = '<root><data><totalLeaders>0</totalLeaders><totalTeammates>2</totalTeammates><totalTrainingTime>12</totalTrainingTime></data></root>';
-- Set our variables
SELECT @totalTrainingTime = NULLIF(ParamValues.x1.value('totalTrainingTime[1]', 'INT'), ''),
@totalTeammates = NULLIF(ParamValues.x1.value('totalTeammates[1]', 'INT'), ''),
@totalLeaders = NULLIF(ParamValues.x1.value('totalLeaders[1]', 'INT'), '')
FROM @xml.nodes('/root/data') AS ParamValues(x1);
-- Test
SELECT @totalLeaders AS leaders,
@totalTeammates AS teammates,
@totalTrainingTime AS trainingTime
--Do we have leaders?
IF (@totalLeaders IS NOT NULL)
BEGIN
SELECT 'Lets update the leaders because we were given a value'
END
ELSE
BEGIN
SELECT 'We did not update leaders because it was a NULL value... However, it was really 0 that was passed'
END
--Do we have teammates?
IF (@totalTeammates IS NOT NULL)
BEGIN
SELECT 'Lets update the teammates because we have a value'
END
【问题讨论】:
标签: sql-server tsql stored-procedures sql-server-2012