【发布时间】:2018-11-05 09:25:27
【问题描述】:
我需要将数据从 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" 而不是 real NULL 的字符串,因此查询数据库后的网格单元格不是黄色而是包含正常文本,即使目标列允许 NULL .
一个简单的测试:
select dbo.nullifempty('NULL')
或
select dbo.nullifempty(null)
也产生一个字符串。
您知道为什么会发生这种情况以及我该如何解决吗?
【问题讨论】:
标签: tsql user-defined-functions sql-server-2017