日期:2014-05-20  浏览次数:21006 次

因为查询无法同时更新聚集键和 text、ntext 或 image 列
我的数据库有
CREATE   TABLE   [dbo].[NewsArticle]   (
[ArticleID]   [uniqueidentifier]   NOT   NULL   ,
[Title]   [nvarchar]   (100)   COLLATE   Chinese_PRC_CI_AS   NOT   NULL   ,
[Content]   [ntext]   COLLATE   Chinese_PRC_CI_AS   NULL   ,
[Keywords]   [nvarchar]   (255)   COLLATE   Chinese_PRC_CI_AS   NULL   ,
[CreatorID]   [uniqueidentifier]   NOT   NULL   ,
[CreateTime]   [datetime]   NOT   NULL   ,
)   ON   [PRIMARY]   TEXTIMAGE_ON   [PRIMARY]
GO

我产生一个强实体DataSet,但是这个数据适配器的Update语句中,

                        this._adapter.UpdateCommand.CommandText   =   "UPDATE   [dbo].[NewsArticle]   SET   [ArticleID]   =   @ArticleID,   [Title]   =   @Title,   [Content]   =   @Content,   [Keywords]   =   @Keywords,   [CreatorID]   =   @CreatorID,   [CreateTime]   =   @CreateTime   WHERE   (([ArticleID]   =   @Original_ArticleID)   AND   ([Title]   =   @Original_Title)     AND   ((@IsNull_Keywords   =   1   AND   [Keywords]   IS   NULL)   OR   ([Keywords]   =   @Original_Keywords))   AND   ([CreatorID]   =   @Original_CreatorID)   AND   ([CreateTime]   =   @Original_CreateTime)   ;
SELECT   ArticleID,   Title,   Content,   Keywords,   CreatorID,   CreateTime   FROM   NewsArticle   WHERE   (ArticleID   =   @ArticleID) ";


在调用时,会产生一个异常:
因为查询无法同时更新聚集键和   text、ntext   或   image   列。

但是这个语句又是自动生成的,我又不好改。
请问大家有什么好的解决方法。

------解决方案--------------------
那手写 SQL 来分步更新吧
呵呵
------解决方案--------------------
要不试试多写几句SQL
SQL 来分步更新
------解决方案--------------------
你将聚焦索引取消试试看,还有这样的异常吗?
------解决方案--------------------
"SET [ArticleID] = @ArticleID,... "把主键更新去掉就好了。
------解决方案--------------------
含有类似无法在查询中看到的列最好的还是调用Adapter.UpdateDataSet