存档: 标签: ‘MSSQL’

SQL报错“参数数据类型 text 对于 replace 函数的参数 1 无效”

2 条评论 2009年11月2日

说到数据库中文本的替换,一般人首先想到的是Replace函数:

update Table set Column=Replace(Column,’oldkeyword’,'newkeyword’)

不过,当Column为text或ntext时,用以上的查询就会报错“参数数据类型 text 对于 replace 函数的参数 1 无效”。原来问题是出在对text或ntext类型的数据在查询中不能进行字符串操作。这时用得最多的便是把text当作varchar(实际内容长度低于8000字节时)或把ntext当作nvarchar(实际内容长度低于4000字节时)来处理了:

update Table set Column=Replace(Cast(Column as varchar(8000)),’oldkeyword’,'newkeyword’)

update Table set Column=Replace(Cast(Column as nvarchar(4000)),’oldkeyword’,'newkeyword’)

SQL数据库被标为可疑/置疑/质疑的处理

没有评论 2008年11月1日

已经是第二次遇到这问题了,在管理器中该数据库被标为可疑(在原来2000版本中好象叫“置疑”),此时不能对该库进行任何操作。用以下SQL文可以搞定:

USE MASTER
GO
SP_CONFIGURE ‘ALLOW UPDATES’,1 RECONFIGURE WITH OVERRIDE
GO
ALTER DATABASE db1 SET EMERGENCY
GO
sp_dboption ‘db1′, ‘single user’, ‘true’
GO
DBCC CHECKDB(‘db1′,’REPAIR_ALLOW_DATA_LOSS’)
GO
ALTER DATABASE db1 SET ONLINE
GO
sp_configure ‘allow updates’, 0 reconfigure with override
GO
sp_dboption ‘db1′, ‘single user’, ‘false’
GO

其中db1是数据库的名字。

两次造成该问题的原因都是服务器意外重启,而且最近几天服务器总是频繁意外重启,目前正在找原因。

SQL Server创建用户时报错:15023 用户、组或角色′XXX’在当前数据库中已存在

1条评论 2008年4月23日

前几天被SQL好一个郁闷, 其中包括了种种问题, 本想将解决过程记下来的, 但精力有限, 一直没能如愿. 今天看到linker对于”sql2000 因为选定的用户拥有对象,所以无法除去该用户”问题的解决方法, 感觉与我遇到的其中一个问题类似, 就单独把这个问题述一下吧.

在本地调试的一个数据库放到服务器上后发现数据库的用户名跟着数据库过去了(废话,本来就是数据库系统表中的一条记录,能不过去吗?), 但登录名支了没过去, 就随手想创建一个登录名, 以给该用户使用的, 但创建登录名时发现可能是出于安全考虑吧, 创建的登录名不允许用来操作该数据库. 报”用户、组或角色′XXX’在当前数据库中已存在 错误:15023″的错.

想手工把登录名与数据库中的用户名进行关联, 系统不让; 想删除数据库中的用户再重建, 竟然也不让删……

老办法: 放狗~

最终发现这种情况叫”存在孤立用户”, 其实用系统的一个存储过程sp_change_users_login就可以搞定的:

Use ABC
go
sp_change_users_login ‘update_one’, ‘xxx’, ‘xxx

解释一下参数:

ABC, 就不用说了, 想进行操作的数据库呗

update_one, 表示只对一个用户进行操作

xxxxxx, 则分别是SQL Server的登录名与数据库中的用户名

sp_change_users_login的更详细的用法可以参考SQL Server的联机帮助, SQL Server 2005的在此, SQL 2000的链接不方便做成链接的形式, 各位可以自己到联机丛书的索引中找一下.

linker同学这下明白了吧? 呵呵, 不用谢我, 把授课费打到我的招行的帐号上就可以了. 我的帐号? 请拨110, 向接电话的那位女士咨询.

实现单一模式下修复SQL Server 2005中数据库的错误

没有评论 2007年4月4日

昨天硬盘出错, 把数据全盘GHOST到新盘后发现库中文章表中遇到了问题, 不管是生成静态页还是删除指定文章, 只要查询时遇到有错误的记录就报错.

查了一下HELP知道DBCC CHECKTABLE命令可以修复, 但要求是在"单用户模式"下进行, 从HELP中看到手动启动SQL时加 -m 参数可以实现单用户, 结果发现根本不行, 哪怕把服务器上的网站全停了还是不行.

放狗一顿狂搜, 加上SQL自带的HELP, 终于凑出来了一段(就三行^_^)命令:

alter database 库名 set SINGLE_USER
DBCC CHECKTABLE (表名,REPAIR_ALLOW_DATA_LOSS)
alter database 库名 set MULTI_USER

这样一来就可以在基本不影响网站访问的情况下把问题解决了 :-)

Del.icio.us : , ,