Sql server 2008 没有可用数据时不获取空值
在我的存储过程中,我声明了@account_id,它根据序列号进行设置。 如果序列号没有匹配的记录,@account\u id不会获得空值。B节中提到的条件。 所以,当我传递无效的序列号时,仍然会出现不应该出现的记录。请引导我解决这个问题Sql server 2008 没有可用数据时不获取空值,sql-server-2008,Sql Server 2008,在我的存储过程中,我声明了@account_id,它根据序列号进行设置。 如果序列号没有匹配的记录,@account\u id不会获得空值。B节中提到的条件。 所以,当我传递无效的序列号时,仍然会出现不应该出现的记录。请引导我解决这个问题 Section A: DECLARE @Account_ID INT SELECT @Account_ID = ACCOUNT_ID FROM T_ACCOUNT WITH (NOLOCK) WHERE SERIAL_NUMBER = @Se
Section A:
DECLARE @Account_ID INT
SELECT @Account_ID = ACCOUNT_ID FROM T_ACCOUNT WITH (NOLOCK) WHERE SERIAL_NUMBER = @Serial_Number
Section B:
WHERE
(@Account_ID IS NULL OR Acct.ACCOUNT_ID = @Account_ID)
试试这个
Section A:
DECLARE @Account_ID INT
SELECT @Account_ID = ACCOUNT_ID FROM T_ACCOUNT WITH (NOLOCK) WHERE SERIAL_NUMBER = @Serial_Number
Section B:
WHERE
Acct.ACCOUNT_ID = @Account_ID
在查询中,您使用的是OR条件,其中即使变量@AccountId为NULL,查询也会返回所有记录 如果
@Account\u ID
部分A
中没有匹配行,则@Account\u ID
将为NULL
。未对变量进行赋值,且其先前的值为NULL
。但是你的WHERE
说如果是这样的话,把B部分的所有行都带回来。B部分的WHERE与A部分有什么关系?在A节中已经有WHERE子句!?嗨,Martin,如果给出的序列号无效,如何不获取任何记录。您是否可以建议将@帐户\u ID为空或从您的第二个位置中删除。或者,如果您需要区分它是NULL
作为未赋值和NULL
作为参数值显式传入,那么您可以在赋值后立即检查@@ROWCOUNT
。我不明白为什么您有两个几乎相同的问题,两个问题间隔仅2小时。另一个