| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1223 人关注过本帖
标题:SQL连字符串的问题?
只看楼主 加入收藏
孙大圣
Rank: 2
等 级:新手上路
威 望:4
帖 子:127
专家分:0
注 册:2006-2-23
收藏
 问题点数:0 回复次数:3 
SQL连字符串的问题?

看看这个字符串的问题在哪?我是怎么也调不通了!谢谢
use pubs
declare @chvSource sysname, --数据源
@chvCol sysname, --字段名
@intLen int, --字符串的宽度
@chrRetuCode varchar(20),
@chvExec nvarchar(2000)

set @chvSource = 'sales'
set @intLen = 4
set @chvCol = 'stor_id'

Select @chvExec = 'Select @chrRetuCode =
(CASE When Exists(Select * From ['+@chvSource+'] A Where A.['+@chvCol+'] = '''+REPLICATE('0',@intLen - 1) + '1'')
Then '''+REPLICATE('0',@intLen-LEN(Convert(varchar(20),Convert(int,MIN('['+@chvCol+']')) + 1))) + Convert(varchar(20),Convert(int,MIN('['+@chvCol+']')) + 1)+'''
Else '''+REPLICATE('0',@intLen - 1) + '1''
END)
From ['+@chvSource+']
Where Not ['+@chvCol+'] IN (Select REPLICATE(''0'',@intLen-LEN(Convert(varchar(20),Convert(bigint,B.['+@chvCol+']) - 1)))
From ['+@chvSource+'] B)'


--我想最后得到这样的效果,下面的可以运行
use pubs
declare @chvSource sysname, --数据源
@chvCol sysname, --字段名
@intLen int, --字符串的宽度
@chrRetuCode varchar(20),
@chvExec nvarchar(2000)

set @chvSource = 'sales'
set @intLen = 4
set @chvCol = 'stor_id'

Select (CASE When Exists(Select * From sales A Where A.stor_id = REPLICATE('0',@intLen - 1) + '1')
Then REPLICATE('0',@intLen-LEN(Convert(varchar(20),Convert(int,MIN(stor_id)) + 1))) + Convert(varchar(20),Convert(int,MIN(stor_id)) + 1)
Else REPLICATE('0',@intLen - 1) + '1'
END)
From sales
Where Not stor_id IN (Select REPLICATE('0',@intLen-LEN(Convert(varchar(20),Convert(int,B.stor_id) - 1)))
From sales B)

搜索更多相关主题的帖子: SQL 连字符 set Select sysname 
2006-03-10 21:19
孙大圣
Rank: 2
等 级:新手上路
威 望:4
帖 子:127
专家分:0
注 册:2006-2-23
收藏
得分:0 
主要是这个地方有问题
Then '''+REPLICATE('0',@intLen-LEN(Convert(varchar(20),Convert(int,MIN('['+@chvCol+']')) + 1))) + Convert(varchar(20),Convert(int,MIN('['+@chvCol+']')) + 1)+'''

非学无以广才,非志无以成学
2006-03-10 21:22
wsn
Rank: 2
等 级:新手上路
威 望:5
帖 子:321
专家分:0
注 册:2006-2-9
收藏
得分:0 
use pubs
declare @chvSource sysname, --数据源
@chvCol sysname, --字段名
@intLen int, --字符串的宽度
@chrRetuCode varchar(20),
@chvExec nvarchar(2000)

set @chvSource = 'sales'
set @intLen = 4
set @chvCol = 'stor_id'

Select (CASE When Exists(Select * From sales A Where A.stor_id = REPLICATE('0',@intLen - 1) + '1')
Then REPLICATE('0',@intLen-LEN(Convert(varchar(20),Convert(int,MIN(stor_id)) + 1))) + Convert(varchar(20),Convert(int,MIN(stor_id)) + 1)
Else REPLICATE('0',@intLen - 1) + '1'
END)
From sales
Where Not stor_id IN (Select REPLICATE('0',@intLen-LEN(Convert(varchar(20),Convert(int,B.stor_id) - 1)))
From sales B)
这段是没得问题的,结果0001


已婚男人!没事请勿打扰·老婆格言:①不准對她耍酷 ②不准讓她吃醋 ③吵架我要讓步 ④揍我我要挺住⊙⊙
2006-03-11 10:43
孙大圣
Rank: 2
等 级:新手上路
威 望:4
帖 子:127
专家分:0
注 册:2006-2-23
收藏
得分:0 
这个字符串已经调好了,没想到从一个不到两千条的表中查询就要花费快3秒钟!
大家先看看这个串,看还有什么高招啊...
Select @chvExec = 'Select @chrRetuCode =
(CASE When Exists(Select * From ['+@chvSource+'] A Where A.['+@chvCol+'] = '''+REPLICATE('0',@intLen - 1) + '1'')
Then REPLICATE(''0'',@intLen-LEN(Convert(varchar(20),Convert(int,MIN(['+@chvCol+'])) + 1))) + Convert(varchar(20),Convert(int,MIN(['+@chvCol+'])) + 1)
Else '''+REPLICATE('0',@intLen - 1) + '1''
END)
From ['+@chvSource+']
Where Not ['+@chvCol+'] IN (Select REPLICATE(''0'',@intLen - LEN(Convert(varchar(20),Convert(bigint,B.['+@chvCol+']) - 1))) + Convert(varchar(20),Convert(bigint,B.['+@chvCol+']) - 1)
From ['+@chvSource+'] B)'


主要就是慢在Where 条件用 IN 子查询啦 !

非学无以广才,非志无以成学
2006-03-13 22:12
快速回复:SQL连字符串的问题?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015354 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved