Не удается вставить NULL в поле NTEXT в SQL CE? - PullRequest
1 голос
/ 01 декабря 2010

Простой пример:

CREATE TABLE People (
      personID     int          not null
    , name         nvarchar(50)  not null
    , addrLine1    nvarchar(50) null
    , addrLine2    nvarchar(50) null
    , suburb       nvarchar(30) not null
    , xmlRawInput  ntext        not null
    , xmlRawOutput ntext        null
) 
GO


INSERT People (
      personID          
    , name              
    , addrLine1         
    , addrLine2         
    , suburb            
    , xmlRawInput       
    , xmlRawOutput
)
SELECT
      101             AS personID           
    , 'george benson'   AS name
    , '123 help st'   AS addrLine1
    , NULL            AS addrLine2          
    , 'los angeles'   AS suburb
    , '<example>record<example>' AS xmlRawInput     
    , 'I LOVE MICROSOFT' AS xmlRawOutput
GO

Это отлично работает;Обратите внимание, что Null может быть легко вставлен в столбец addrLine2;Но если я изменю «Я люблю Microsoft» на NULL в столбце ntext, я получаю следующую ошибку: Преобразование не поддерживается.[Тип для преобразования из (если известно) = int, Тип для преобразования в (если известно) = ntext]

Ошибка вставки ниже;есть идеи?Я использую версию CE 3.5.8080.0.

INSERT People (
      personID          
    , name              
    , addrLine1         
    , addrLine2         
    , suburb            
    , xmlRawInput       
    , xmlRawOutput
)
SELECT
      101             AS personID           
    , 'george benson'   AS name
    , '123 help st'   AS addrLine1
    , NULL            AS addrLine2          
    , 'los angeles'   AS suburb
    , '<example>record<example>' AS xmlRawInput     
    , NULL AS xmlRawOutput
GO

1 Ответ

2 голосов
/ 01 декабря 2010

Две идеи:

Используйте предложение values вместо select в вашем insert, то есть:

INSERT People (
      personID          
    , name              
    , addrLine1         
    , addrLine2         
    , suburb            
    , xmlRawInput       
    , xmlRawOutput
)
VALUES (
      101
    , 'george benson'
    , '123 help st'
    , NULL     
    , 'los angeles'
    , '<example>record<example>'
    , NULL 
)

Если по какой-то причине вынеобходимо использовать предложение select (почему?), попробуйте явно привести NULL к ntext.то есть select convert(ntext, NULL).

Если предложение values работает, возможно, причина в том, что движок SqlCE туп и использует неправильный тип данных по умолчанию для null в операторе select.convert может работать или не работать, в зависимости от того, какой тип данных null будет первым, поскольку технически вы не можете привести что-либо к ntext ... но это стоит попробовать.

...