本文章介绍关于SQL Server打开数据表中的XML内容时报错的解决办法
,有需要了解的朋友可以参考一下本文章。

sql 根据条件更新记录 case then第一个利用存储过程来做

很多时间我们会把insert into每插入一条记录生成一个如insert into table
value这样的做法,这样数据量少没事多了会出问题,下面我们讲述一下insert
into语句优化方法. 代码如下复制代码

从SQL Server2005开始提供了一种新的数据类型XML
type,它允许用户将数据以XML文件的格式直接存储到数据表中。结合在ASP.NET中使用Linq
to Sql,我们可以非常方便地将XML文件存储到SQL
Server数据库中。但是在默认情况下,如果你存储的XML文件比较大,在SQL
Server管理器中不能直接点击查看XML内容而报以下错误提示:

declare @str varchar(500)set @str=@str+’update 表名’if state=1 set
@str=@str+’ set state=0’else set @str=@str+’ set state=1′

set @str=@str+’ where moduleroleid=’1’exec(@str)

insert into table value(‘a’,’b’); … insert into table value(‘m’,’n’);

如何解决该问题呢?很简单,其实错误提示中已经描述地很清楚了,在SQL Server
Management
Studio中点击Tools菜单,选择Options。然后找到下图对应的设置节点,将XML
data的最大字符限制改成Unlimited即可。 默认情况下,SQL
Server为了提高查询效率,在Management
Studio中最多只返回小于2MB的XML数据内容,如果你存储的XML文件的内容大于2MB则剩余的字符会自动被截断,从而在打开的时候出错。

//

但是由于每进行一次insert into
都会对数据库进行一次I/O操作,所以导致这样的循环插入方式变的非常慢所以,可以使用一条insert
into进行批量插入

update 表名 set state=0 where moduleroleid=1 and state=1update 表名
set state=1 where moduleroleid=1 and state=0– case..whenupdate 表名
case when state=1 then set state=0 else set state=1 end where
moduleroleid=’1′– if..elseif exists select 1 from 表名 where
moduleroleid=1 and state=1 update 表名 set state=0 where
moduleroleid=1 and state=1else update 表名 set state=1 where
moduleroleid=1 and state=0end– 这主意不错:lupdate 表名 set
state=(state+1)%2 where moduleroleid=1

代码如下复制代码

insert into table values(‘a’,’b’),(‘c’,’d’),(‘e’,’f’)…(‘m’,’n’);

发表评论

电子邮件地址不会被公开。 必填项已用*标注