Не удается вставить NULL в поле NTEXT в SQL CE?

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

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

person joedotnot    schedule 01.12.2010    source источник
comment
Похоже на баг - можно попробовать на предыдущей версии и посмотреть, проявится ли он там?   -  person Will A    schedule 01.12.2010


Ответы (1)


Две идеи, которые стоит попробовать:

Используйте предложение 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... но попробовать стоит.

person Donnie    schedule 01.12.2010
comment
Спасибо. Это проблема и с уникальным типом идентификатора. - person Evil Pigeon; 01.12.2014