数据类型转换的问题 我用ntext存储字符串,因为字符特别的长还有要存储一些特殊的字符,比如版权符号和商标符号之类的,但是我在对这个字段进行replace的时候,系统提示不可以对ntext字段进行replace,我转换为nvarchar(4000)吧,容量还不够,郁闷。哪位给个好的方法呀。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 -----给你一个老大的例子吧------꿎桿鑒앴CREATE TABLE tb(col ntext)INSERT tb VALUES(REPLICATE( '0001,0002,0003,0004,0005,0006,0007,0008,0009,0100,' +'220000001,302000004,500200006,700002008,900002120,',800))DECLARE @p binary(16)SELECT @p=TEXTPTR(col) FROM tbUPDATETEXT tb.col @p NULL 0 tb.col @pGO--競뻣뇹잿땍屢DECLARE @s_str nvarchar(1000),@r_str nvarchar(1000)SELECT @s_str='00' --狼競뻣돨俚륜눔 ,@r_str='0000' --競뻣냥맡俚륜눔DECLARE @p varbinary(16)DECLARE @start int,@s nvarchar(4000),@len intDECLARE @s_len int,@step int,@last_repl int,@pos int--競뻣뇹잿꽝鑒零SELECT --痰黨狼털뙤첼늴쌔혤鑒앴,離빈寧몸굳競뻣鑒앴貫零돨뇹잿 @s_len=LEN(@s_str), --零첼늴壇맡쌔혤돨鑒앴돨낀똑,렝岺REPLACE빈鑒앴淚놔 @step=CASE WHEN LEN(@r_str)>LEN(@s_str) THEN 4000/LEN(@r_str)*LEN(@s_str) ELSE 4000 END--競뻣뇹잿돨역迦貫零SELECT @start=PATINDEX('%'+@s_str+'%',col), @p=TEXTPTR(col), @s=SUBSTRING(col,@start,@step), @len=LEN(@s), @last_repl=0FROM tbWHERE PATINDEX('%'+@s_str+'%',col)>0 AND TEXTVALID('tb.col',TEXTPTR(col))=1WHILE @len>=@s_lenBEGIN --돤돕離빈寧몸굳競뻣鑒앴돨貫零 WHILE CHARINDEX(@s_str,@s,@last_repl)>0 SET @last_repl=@s_len +CHARINDEX(@s_str,@s,@last_repl) --흔벎矜狼,뫘劤鑒앴,谿珂털뙤苟寧몸혤鑒貫零돨튤盧좆 IF @last_repl=0 SET @last_repl=@s_len ELSE BEGIN SELECT @last_repl=CASE WHEN @len<@last_repl THEN 1 WHEN @len-@last_repl>=@s_len THEN @s_len ELSE @len-@last_repl+2 END, @s=REPLACE(@s,@s_str,@r_str), @pos=@start-1 UPDATETEXT TB.col @p @pos @len @s END --삿혤苟寧몸狼뇹잿돨鑒앴 SELECT @start=@start+LEN(@s)-@last_repl+1, @s=SUBSTRING(col,@start,@step), @len=LEN(@s), @last_repl=0 FROM tbENDGO--鞫刻뇹잿써벎SELECT datalength(col),* FROM tbDROP TABLE tb 求SQL COMMAND -有關UPDATE DATA 关于SQL数据库的一个小白问题: 时间显示格式问题 sql2005问题!! 一个查询问题 我每天做的事 一个DBA 在存储过程中连接SQL语句的问题??? 请教一条连接两表的SQL语句 怎么取本月的最后一天 SQL 多表查询,显示结果最多那个 sql server2005安装 没分了,帮帮菜鸟吧,两个时间相减取时分,做一天多了
--꿎桿鑒앴
CREATE TABLE tb(col ntext)
INSERT tb VALUES(REPLICATE( '0001,0002,0003,0004,0005,0006,0007,0008,0009,0100,'
+'220000001,302000004,500200006,700002008,900002120,',800))
DECLARE @p binary(16)
SELECT @p=TEXTPTR(col) FROM tb
UPDATETEXT tb.col @p NULL 0 tb.col @p
GO--競뻣뇹잿땍屢
DECLARE @s_str nvarchar(1000),@r_str nvarchar(1000)
SELECT @s_str='00' --狼競뻣돨俚륜눔
,@r_str='0000' --競뻣냥맡俚륜눔DECLARE @p varbinary(16)
DECLARE @start int,@s nvarchar(4000),@len int
DECLARE @s_len int,@step int,@last_repl int,@pos int--競뻣뇹잿꽝鑒零
SELECT
--痰黨狼털뙤첼늴쌔혤鑒앴,離빈寧몸굳競뻣鑒앴貫零돨뇹잿
@s_len=LEN(@s_str), --零첼늴壇맡쌔혤돨鑒앴돨낀똑,렝岺REPLACE빈鑒앴淚놔
@step=CASE WHEN LEN(@r_str)>LEN(@s_str)
THEN 4000/LEN(@r_str)*LEN(@s_str)
ELSE 4000 END--競뻣뇹잿돨역迦貫零
SELECT @start=PATINDEX('%'+@s_str+'%',col),
@p=TEXTPTR(col),
@s=SUBSTRING(col,@start,@step),
@len=LEN(@s),
@last_repl=0
FROM tb
WHERE PATINDEX('%'+@s_str+'%',col)>0
AND TEXTVALID('tb.col',TEXTPTR(col))=1
WHILE @len>=@s_len
BEGIN
--돤돕離빈寧몸굳競뻣鑒앴돨貫零
WHILE CHARINDEX(@s_str,@s,@last_repl)>0
SET @last_repl=@s_len
+CHARINDEX(@s_str,@s,@last_repl) --흔벎矜狼,뫘劤鑒앴,谿珂털뙤苟寧몸혤鑒貫零돨튤盧좆
IF @last_repl=0
SET @last_repl=@s_len
ELSE
BEGIN
SELECT @last_repl=CASE
WHEN @len<@last_repl THEN 1
WHEN @len-@last_repl>=@s_len THEN @s_len
ELSE @len-@last_repl+2 END,
@s=REPLACE(@s,@s_str,@r_str),
@pos=@start-1
UPDATETEXT TB.col @p @pos @len @s
END
--삿혤苟寧몸狼뇹잿돨鑒앴
SELECT @start=@start+LEN(@s)-@last_repl+1,
@s=SUBSTRING(col,@start,@step),
@len=LEN(@s),
@last_repl=0
FROM tb
END
GO--鞫刻뇹잿써벎
SELECT datalength(col),* FROM tb
DROP TABLE tb