一个简单的例子:
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列上'我爱微软'为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
答案 0 :(得分: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
子句(为什么?),请尝试明确地将NULL
强制转换为ntext
。即,select convert(ntext, NULL)
。
如果values
子句有效,那么原因可能是SqlCE引擎变得愚蠢并且在null
语句中使用了错误的select
默认数据类型。 convert
可能有效,也可能无效,具体取决于null
首先采用的数据类型,因为从技术上讲,您无法向ntext
投放任何内容......但值得尝试。