我在不同的地方使用这种语法,
CASE WHEN [dbo].[IsNullOrWhiteSpace](@MyColumn) = 1 OR [dbo].[IsNullOrWhiteSpace](Name) = 0 THEN [Name] ELSE @MyColumn END
唯一的变化是Name和@MyColumn。但MyColumn可以是任何类型。任何方式创建一个功能,使用genric类型执行此操作。这就是我所期待的,
ALTER FUNCTION [dbo].[GetParameterOrPreviousValue]
(
@Value1 AnyType
,@Value2 AnyType
)
RETURNS AnyType
AS
BEGIN
RETURN CASE WHEN [dbo].[IsNullOrWhiteSpace](@Value1) = 1 OR [dbo].[IsNullOrWhiteSpace](@Value2) = 0 THEN @Value2 ELSE @Value1 END;
END
请参阅AnyType。
更新
这是我的IsNullOrEmpty,
ALTER FUNCTION [dbo].[IsNullOrWhiteSpace]
(
@Value nvarchar(MAX)
)
RETURNS bit
AS
BEGIN
RETURN CASE WHEN LTRIM(RTRIM(ISNULL(@Value,''))) = '' THEN 1 ELSE 0 END;
END
我在UPDATE语句中使用它,
UPDATE T SET [Name] = dbo.GetParameterOrPreviousValue(@Name, Name)
,[Gender] = dbo.GetParameterOrPreviousValue(@Gender, Gender)
,[Location] = dbo.GetParameterOrPreviousValue(@Location, Location)
,[RawData] = dbo.GetParameterOrPreviousValue(@RawData, RawData)
答案 0 :(得分:3)
我猜你可以使用sql_variant。还有[dbo].[IsNullOrWhiteSpace]
呢?需要String
类型吗?
答案 1 :(得分:2)
有“old-skool”sql_variant
类型:
存储各种SQL Server支持的数据类型值的数据类型。
但请注意,大多数现代数据类型(例如varchar(max)
,geography
等)都不受支持。
如果你想要做的只是忽略空参数值,你可以使用COALESCE
:
COALESCE(@Name,Name)
如果要忽略null和空参数值,可以使用COALESCE
和NULLIF
:
COALESCE(NULLIF(@Name,''),Name)
我一般都不愿意像对待NULL
一样对待所有类型的空白。