假设我有一个函数或存储过程,它接受几个VARCHAR参数。我已经厌倦了这样编写SQL来测试这些参数是否有值:
IF @SomeVarcharParm IS NOT NULL AND LEN(@SomeVarcharParm) > 0
BEGIN
-- do stuff
END
要做到这一点还有更好的方法。不存在吗?
答案 0 :(得分:25)
您可以执行ISNULL(@SomeVarcharParam, '') <> ''
,也可以创建一个返回位的UDF:
create function dbo.IsNullOrEmpty(@x varchar(max)) returns bit as
BEGIN
IF @SomeVarcharParm IS NOT NULL AND LEN(@SomeVarcharParm) > 0
RETURN 0
ELSE
RETURN 1
END
使用IF NOT dbo.IsNullOrEmpty(@SomeVarcharParam) BEGIN ...
请记住,在调用UDF时,必须为其所有者添加前缀(此处为dbo。)
答案 1 :(得分:12)
IF COALESCE(@SomeVarcharParm, '') <> ''
BEGIN
-- do stuff
END
答案 2 :(得分:5)
如果我在串联(在select语句中)连接或合并字符串,并且我想检查列是NULL还是Empty,我这样做:
ISNULL('starting to build string '
+ NULLIF(some_table..some_col_that_might_be_null_or_empty, '')
, 'string to append if the resulting concatenation is null')
表达式内部的NULLIF将强制该列为空,如果它为空,则外部ISNULL表达式可以依赖于一致的输入并做出相应的反应。
答案 3 :(得分:1)
这是我的功能&#34;扩展&#34; ISNULL并检查空。检查测试值是否为null,如果它不为null,则将其修剪,然后检查长度。
如果测试字符串不是Null或Empty,则返回测试字符串,否则返回第二个字符串。
CREATE FUNCTION [dbo].[ISNULLOREMPTY]
(
@value NVARCHAR(max),
@return NVARCHAR(max)
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
IF (@value IS NULL)
BEGIN
RETURN @return
END
ELSE
BEGIN
IF (LEN(LTRIM(@value)) = 0)
BEGIN
RETURN @return
END
END
RETURN @value;
END
GO
答案 4 :(得分:1)
虽然他在技术上实施了IfNullOrWhiteSpace
,但我还是赞成了Atron的答案。
以下是我IfNullOrEmpty()
的实现:
IF EXISTS (SELECT * FROM sys .objects WHERE object_id = OBJECT_ID(N'[dbo].[IfNullOrEmpty]' ) and type in ( N'FN'))
DROP FUNCTION dbo.IfNullOrEmpty
go
CREATE FUNCTION dbo.IfNullOrEmpty(@value varchar(max), @substitute varchar(max)) returns varchar(max) as
BEGIN
IF @value IS NOT NULL AND LEN(@value) > 0
RETURN @value
RETURN @substitute
END
答案 5 :(得分:0)
我意识到这是一个老问题,但这是我在MSSQL中使用的:
LEN(ISNULL(@asdf, ''))>0
示例:
DECLARE @asdf varchar(10)
SET @asdf = NULL --You can change this value to test different outputs
BEGIN IF LEN(ISNULL(@asdf, '')) > 0
PRINT @asdf
ELSE
PRINT 'IS NullOrEmpty'
END
--You can use it inline like this:
PRINT CASE LEN(ISNULL(@asdf, '')) WHEN 0 THEN 'IS NullOrEmpty' ELSE @asdf END
我认为这比其他解决方案更简单,更直接,因为它确实检查字符串是否为null或长度为0。
答案 6 :(得分:0)
在调用LEN之前,您不需要检查null。你可以使用LEN(@SomeVarcharParm)&gt; 0.如果值为NULL,''或'',则返回false。这是因为NULL&gt; 0返回false。亲自看看:
for (int i = 0; i < regist.size(); i++) {
regist[i].printFriendInfo();
}
答案 7 :(得分:0)
您可以执行IF @SomeVarcharParam <> ''
,因为条件将评估为NULL
,如果参数为null,则不会执行分支
答案 8 :(得分:0)
使用此功能(基于Derek's):
CREATE FUNCTION dbo.isNullOrEmpty(@x varchar(max)) RETURNS BIT AS
BEGIN
IF @x IS NOT NULL AND LEN(@x) > 0
RETURN 0
RETURN 1
END
as
dbo.isNullOrEmpty(@someVar)
或
WHERE dbo.isNullOrEmpty(@someVar) = 1
在存储过程或查询中。
答案 9 :(得分:0)
请使用案例command.case结构为:
当条件然后“某个值”否则“某个其他值”结束的情况
一些例子:
declare @SomeVarcharParm as nvarchar(20)=''
declare @SomeVarcharParm2 as nvarchar(20)=''
--select 1 or 2
select case when @SomeVarcharParm is null or @SomeVarcharParm='' then 1 else 2 end
--if null or empty set 'empty' value else set @SomeVarcharParm value
select @SomeVarcharParm2=case when @SomeVarcharParm is null or @SomeVarcharParm='' then 'empty' else @SomeVarcharParm end
--use null or empty in update command
update tbl1
set field1=case when field1 is null or field1='' then @SomeVarcharParm2 else field1 end
where id=1