2010-12-01 3 views
1

Un exemple simple:Impossible d'insérer NULL dans le champ NTEXT dans 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 

Cela fonctionne très bien; Notez que Null peut facilement être inséré dans la colonne addrLine2; Mais si je change 'J'aime Microsoft' à NULL sur la colonne ntext, j'obtiens l'erreur suivante: La conversion n'est pas supportée. [Type à convertir (si connu) = int, Type à convertir en (si connu) = ntext]

L'insertion échoue pour ci-dessous; des idées? J'utilise la version 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 
+0

Cela ressemble à un bug - pouvez-vous essayer sur une version précédente et voir si elle se manifeste là-bas? –

Répondre

2

Deux idées à essayer:

Utilisez une clause values au lieu de select clause dans votre insert, à savoir:

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

Si, pour une raison quelconque, vous devez utiliser la clause select (pourquoi?), essayez de lancer le NULL à ntext explicitement. c'est-à-dire select convert(ntext, NULL).

Si la clause fonctionne values, la cause est probablement le moteur de SQLCE étant muet et en utilisant le mauvais type de données par défaut du null dans la déclaration select. Le convert peut ou ne peut pas fonctionner, selon ce que le type de données null prend en premier, puisque techniquement, vous ne pouvez rien lancer à ntext ... mais ça vaut la peine d'essayer.

+0

Merci. C'est aussi un problème avec le type uniqueidentifier. –

Questions connexes