1

一个简单的例子:

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 列中;但是,如果我在 ntext 列上将 'I Love Microsoft' 更改为 NULL,我会收到以下错误:不支持转换。[要转换的类型(如果知道)= 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
4

1 回答 1

2

尝试两个想法:

在您的 中使用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子句(为什么?),请尝试显式转换NULLto ntext。即,select convert(ntext, NULL)

如果该values子句有效,那么原因可能是 SqlCE 引擎愚蠢并且nullselect语句中使用了错误的默认数据类型。convert可能会或可能不会起作用,具体取决于首先采用的数据类型,null因为从技术上讲,您无法将任何东西投射到ntext……但值得尝试。

于 2010-12-01T05:49:20.877 回答