tsql - 标量值函数不返回 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)
也产生一个字符串。
您知道为什么会发生这种情况以及我该如何解决吗?
解决方案
用“ALTER”替换行
ALTER FUNCTION [dbo].[NullIfEmpty](@input nvarchar(max))
并与'if'一致
if (LTRIM(RTRIM(@input)) = '' or @input IS NULL)
推荐阅读
- android-intent - 带有pendingIntent的fusedLocationProviderClient requestLocationUpdates不会触发
- html - 不允许单击元素的边距来更改页面
- go - 如何使用sqlx对表字段和参数进行查询?
- java - MySQL 在一分钟内执行数千次持续插入后一直锁定
- php - 从动态表单提交值,使用数组
- powershell - 为什么通过 Invoke-Command 远程运行 Get-WmiObject 失败?
- checkbox - 需要取消选中所有复选框,选择底部复选框时,没有使用 Angular 7 的 jquery
- python - 计算来自两个不同数据帧的两个字符串列之间的 Levenshtein 距离
- java - 折叠工具栏不与抽屉布局折叠
- blockchain - 如何用多台 PC 挖以太坊?