create procedure p_replacentext(@vTable varchar(50), @vField varchar(30),@vBefore varchar(8000),@vAfter varchar(8000))
as
begin
Declare @Sql nvarchar(4000)
Declare @p binary(16),@postion int,@rplen int
set @Sql=N'Select @p=textptr('+@vField+'),@rplen=len('''+@vBefore+'''),@postion=patindex(''%'+@vBefore+'%'','+@vField+')-1 from '+@vTable
exec sp_executesql @Sql,N'@p binary(16) output,@rplen int output,@postion int output ',@p output,@rplen output,@postion output
while @postion >= 0
begin
set @Sql=N'updatetext '+@vTable+'.'+@vField+' @p '+cast(@postion as varchar(8))+' '+cast(@rplen as varchar(4))+' '+@vAfter
print @Sql
exec(@Sql)
set @Sql=N'select @postion=patindex(''%'+@vBefore+'%'','+@vField+')-1 from '+@vTable
exec sp_executesql @Sql,N'@postion int output ',@postion output
end
end ---------
create TABLE t(col1 char(1000), col2 ntext)
INSERT t SELECT '', 'aa北京中华人民共和国北京天安门北京asdsdf'+REPLICATE('a', 8000)
select * from t
exec p_replacentext 't','col2','北京','首都'
select * from t
drop table t对上面的执行是死循环,中断后的提示为:
------------------------------------------
updatetext t.col2 @p 2 2 首都
服务器: 消息 137,级别 15,状态 2,行 1
必须声明变量 '@p'。
.
.
.
as
begin
Declare @Sql nvarchar(4000)
Declare @p binary(16),@postion int,@rplen int
set @Sql=N'Select @p=textptr('+@vField+'),@rplen=len('''+@vBefore+'''),@postion=patindex(''%'+@vBefore+'%'','+@vField+')-1 from '+@vTable
exec sp_executesql @Sql,N'@p binary(16) output,@rplen int output,@postion int output ',@p output,@rplen output,@postion output
while @postion >= 0
begin
set @Sql=N'updatetext '+@vTable+'.'+@vField+' @p '+cast(@postion as varchar(8))+' '+cast(@rplen as varchar(4))+' '+@vAfter
print @Sql
exec(@Sql)
set @Sql=N'select @postion=patindex(''%'+@vBefore+'%'','+@vField+')-1 from '+@vTable
exec sp_executesql @Sql,N'@postion int output ',@postion output
end
end ---------
create TABLE t(col1 char(1000), col2 ntext)
INSERT t SELECT '', 'aa北京中华人民共和国北京天安门北京asdsdf'+REPLICATE('a', 8000)
select * from t
exec p_replacentext 't','col2','北京','首都'
select * from t
drop table t对上面的执行是死循环,中断后的提示为:
------------------------------------------
updatetext t.col2 @p 2 2 首都
服务器: 消息 137,级别 15,状态 2,行 1
必须声明变量 '@p'。
.
.
.
解决方案 »
- 请问SQL数据类型转换问题?这题有什么错?
- SQL分页语句如何写?
- 求救,没有分了,无私奉献的人感谢
- 要得到这样的数据 SQL怎么写?
- 大家帮我看一下这条SQL是什么意思
- 谁帮我解释一下这段查询语句啊. 越详细越好
- [ConnectionOpen (Connect()).]SQL Server 不存在或拒绝访问,本地机器上出现这样的问题,查过了,没有相似的情况!请教!
- 如何写这条语句
- batchmove是什么东西?怎么用它来设置源表和目的表以导出SQLServer中的表到一个Access文件?
- 在sql anywhere中怎样倒出数据库的结构表?
- sql-server怎么获取刚刚插信息的id
- php连接本地MSSQL数据库的成功与机子是否能够上网有关系吗?(好诡异的问题)
as
begin
Declare @Sql nvarchar(4000)
declare @p_s varchar(800)
Declare @p binary(16),@postion int,@rplen int
set @Sql=N'Select @p=textptr('+@vField+'),@rplen=len('''+@vBefore+'''),@postion=patindex(''%'+@vBefore+'%'','+@vField+')-1 from '+@vTable
exec sp_executesql @Sql,N'@p binary(16) output,@rplen int output,@postion int output ',@p output,@rplen output,@postion output
while @postion >= 0
begin
exec master.dbo.xp_varbintohexstr @p, @p_s out
set @Sql=N'updatetext '+@vTable+'.'+@vField+' '+@p_s+' '+cast(@postion as varchar(8))+' '+cast(@rplen as varchar(4))+' '''+@vAfter+''''
print @Sql
exec(@Sql)
set @Sql=N'select @postion=patindex(''%'+@vBefore+'%'','+@vField+')-1 from '+@vTable
exec sp_executesql @Sql,N'@postion int output ',@postion output
end
end ---------
create TABLE t(col1 char(1000), col2 ntext)
INSERT t SELECT '', 'aa北京中华人民共和国北京天安门北京asdsdf'+REPLICATE('a', 8000)
select * from t
exec p_replacentext 't','col2','北京','首都'
select * from t
drop table t
--结果
aa北京中华人民共和国北京天安门北京asdsdfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...aa首都中华人民共和国首都天安门首都asdsdfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
INSERT t SELECT '', 'aa北京中华人民共和国北京天安门北京asdsdf'+REPLICATE('a', 8000)
select * from t
exec p_replacentext 't','col2','aa','首都'
select * from t
drop table t--结果
aa北京中华人民共和国北京天安门北京asdsdfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa首都北京中华人民共和国北京天安门北京asdsdf首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都首都
--后台执行(所影响的行数为 1 行)
(所影响的行数为 1 行)updatetext t.col2 0xFFFF0812000000003801000001000000 0 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 24 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 26 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 28 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 30 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 32 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 34 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 36 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 38 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 40 2 '首都'
.
.
.
updatetext t.col2 0xFFFF0812000000003801000001000000 7928 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 7930 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 7932 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 7934 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 7936 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 7938 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 7940 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 7942 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 7944 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 7946 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 7948 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 7950 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 7952 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 7954 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 7956 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 7958 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 7960 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 7962 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 7964 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 7966 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 7968 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 7970 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 7972 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 7974 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 7976 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 7978 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 7980 2 '首都'
updatetext t.col2 0xFFFF0812000000003801000001000000 7982 2 '首都'(所影响的行数为 1 行)