首页 > 解决方案 > 标量值函数不返回 NULL,而是返回“NULL”字符串

问题描述

我需要将 Excel 中的数据导入到 ms sql 数据库中,我认为使用OPENROWSET它是个好主意……嗯,它还不错,但有一些副作用。

我收到的数据并不总是 100% 正确。正确地说,我的意思是应该NULL(在 Excel 中为空)的单元格有时包含字符串"NULL"或其他一些垃圾,如空格。我试图用这个脚本修复它:

GO    
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[NullIfEmpty](@input nvarchar)
RETURNS nvarchar(max)
AS
BEGIN

    if (@input = '' or @input = 'NULL')
    begin
        return NULL
    end

    return @input

END

但是奇怪的事情发生了。这给了我一个带有文本"NULL"而不是真实 NULL的字符串,因此查询数据库后的网格单元不是黄色的,而是包含普通文本,即使目标列允许NULL

一个简单的测试:

select dbo.nullifempty('NULL')

或者

select dbo.nullifempty(null)

也产生一个字符串。


您知道为什么会发生这种情况以及我该如何解决吗?

标签: tsqluser-defined-functionssql-server-2017

解决方案


用“ALTER”替换行

ALTER FUNCTION [dbo].[NullIfEmpty](@input nvarchar(max))

并与'if'一致

if (LTRIM(RTRIM(@input)) = '' or @input IS NULL)

推荐阅读