Мне нужно импортировать данные из 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)
также возвращает строку.
Знаете ли вы, почему это происходит, и как я могу это исправить?