刚看了"關於如何在存储过程中拆这个字串",还有疑问

popu2 2002-03-01 11:24:56
刚刚看了
關於如何 --------------------- 在存储过程中拆这个字串 --------------------- 方法很簡單,開銷很小! 請看: http://www.csdn.net/expert/topic/508/508081.xml

觉得很好,有收藏,但还有疑问,
如下
declare @insertSql varchar(2000)
declare @var varchar(1000)
SET @var = '''1389'',''0736'',''0764'''

set @insertSql='
create table #temp2
insert into #temp2 values('''+REPLACE(@var,',',''')insert into #temp2 values(''')+''')'

print @insertSql
--exec (@insertSql) -- 根據變量中的逗號分格插入臨時表

如果@var有近300个用逗号隔开的字串,每个有15个字符,那@insertSql首先得过varchar(8000)这关,如何解决?
...全文
25 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rewiah 2002-03-01
  • 打赏
  • 举报
回复
下一段从联机帮助拷贝:

使用带字符串的 EXECUTE 命令

使用字符串串联运算符 (+) 为动态执行创建长字符串。每个字符串表达式可以是 Unicode 与 non-Unicode 数据类型的混合。

尽管每个 [N] 'tsql_string' 或 @string_variable 不得超过 8,000 个字节,SQL Server 语法分析器中对这种串联只进行逻辑处理而不占用物理内存。例如,该语句决不会生成长 16,000 个串联起来的字符串:

EXEC('name_of_8000_char_string' + 'another_name_of_8000_char_string')

Rewiah 2002-03-01
  • 打赏
  • 举报
回复
可以拆分成几个varchar再窜起来EXEC
Rewiah 2002-03-01
  • 打赏
  • 举报
回复
可以这样:
declare @insertSql varchar(100)
declare @insertSql1 varchar(4000)
declare @insertSql2 varchar(4000)

set @insertSql='
create table #temp2 '
set @insertSql1='
insert into #temp2 values('''+REPLACE(@var,',',''') '
set @insertSql2='
insert into #temp2 values(''')+''')'
exec (@insertSql+@insertSql1+@insertSql2)

或者:

exec ('
create table #temp2
insert into #temp2 values('''+REPLACE(@var,',',''')insert into #temp2 values(''')+''')'
)



net_steven 2002-03-01
  • 打赏
  • 举报
回复
那就用text型的。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧