SQL Server中求子串位置的两个函数
东成西就 14:59:44
曾哥,你好!
请教你一个问题,在存储过程中我有一个语句需要用到 in 子句(字符串),在Delphi中传值进行去,我使用Astr := Astr + ', ' + Format('''%s''', [Avalue])进行格式化,但是出来后好像SQL Server不接受哦!
罩得住 15:04:12
hi,刚过来
罩得住 15:04:45
也许出在Format上,你不用Format试试看
东成西就 15:06:08
合成后的字符串为''00001', '00003'',这样传过去到后台
罩得住 15:06:46
这个我知道,我是说,你能不能先用常量''001','002''试试,看能否接收参数
东成西就 15:07:34
我试一下
东成西就 15:09:57
我用'00001'传进去可以
东成西就 15:10:17
我再试一下,'00001, 00003'
罩得住 15:10:13
如果两个值呢?逗号是否是全角的啦?
东成西就 15:23:33
传入多个值就不行啦
东成西就 15:23:48
我在查询分析器里执行也没有结果
罩得住 15:25:09
你试试半角的双引号,如:'"0001","0003"'
罩得住 15:25:35
SQL中可以识别半角双引号
东成西就 15:26:38
是吗?
罩得住 15:26:28
试试看
东成西就 15:28:50
一个行,多个就不行啦
东成西就 15:29:09
我将存储过程写给你看吧
罩得住 15:29:05
喔,好吧
东成西就 15:30:58
ALTER PROCEDURE dbo.uspGetWaterfees
(
@AmeterID int, -- 水表编号
@ARefID uniqueidentifier = null, -- 引用标识
@AWaterfeeStatecode varchar(256) = null -- 费用状态
)
AS
SET NOCOUNT ON
declare
@Asql varchar(8000)
if @ARefID is null
begin
if @AWaterfeeStatecode is null or (@AWaterfeeStatecode = '')
select * from Waterfees where wfMeterID = @AmeterID order by wfBuilddate desc
else
if Patindex(',', @AWaterfeeStatecode) = 0 -- 只查询一种费用状态
select *
from Waterfees
where wfMeterID = @AmeterID
and wfWaterfeeStatecode = @AWaterfeeStatecode
order by wfBuilddate desc
else
begin
select @Asql = '
select *
from Waterfees
where wfMeterID = ' + @AmeterID + '
and wfWaterfeeStatecode in (' + @AWaterfeeStatecode + ')
order by wfBuilddate desc'
exec (@Asql)
end
end else
if @AWaterfeeStatecode is null or (@AWaterfeeStatecode = '')
select *
from Waterfees
where wfMeterID = @AmeterID and wfRefID = @ARefID
order by wfBuilddate desc
else
if Patindex(',', @AWaterfeeStatecode) = 0 -- 只查询一种费用状态
select *
from Waterfees
where wfMeterID = @AmeterID and wfRefID = @ARefID
and wfWaterfeeStatecode = @AWaterfeeStatecode
order by wfBuilddate desc
else
select *
from Waterfees
where wfMeterID = @AmeterID and wfRefID = @ARefID
and wfWaterfeeStatecode in (@AWaterfeeStatecode)
order by wfBuilddate desc
SET NOCOUNT OFF
RETURN
罩得住 15:31:56
你传的是第几个参数?
东成西就 15:32:51
select @Asql = '
select *
from Waterfees
where wfMeterID = ' + @AmeterID + '
and wfWaterfeeStatecode in (' + @AWaterfeeStatecode + ')
order by wfBuilddate desc'
exec (@Asql)
问题出在这里,以前都是直接执行的
语句如下
select *
from Waterfees
where wfMeterID = @AmeterID
and wfWaterfeeStatecode in (@AWaterfeeStatecode)
order by wfBuilddate desc
东成西就 15:34:18
我是这样执行的
exec uspGetWaterfees 212500, null, '00001, 00003'
exec uspGetWaterfees 212500, null, '''00001'', ''00003'''
exec uspGetWaterfees 212500, null, '"00001", "00003"'
都没有结果
东成西就 15:36:11
而如果这样直接在查询分析器里执行去可以
declare
@Asql varchar(8000),
@AWaterfeeStatecode varchar(256)
select @AWaterfeeStatecode = '00001, 00003',
@Asql = '
select *
from Waterfees
where wfMeterID = 212500
and wfWaterfeeStatecode in (' + @AWaterfeeStatecode + ')
order by wfBuilddate desc'
exec (@Asql)
罩得住 15:37:18
你试过这种没有
'''0001,0003'''
东成西就 15:37:57
没有,我试试
东成西就 15:38:20
也没有结果啊
罩得住 15:40:05
where wfMeterID = 212500
and wfWaterfeeStatecode in ("' + @AWaterfeeStatecode + '") order by wfBuilddate desc'
罩得住 15:40:29
试试,不行的话,我就搞不懂了
东成西就 15:40:53
我试试
东成西就 15:43:09
不行,其实在SQL Server中字符串及整数型都可以进行隐式转换的啊,
不加"都可以直接执行
罩得住 15:43:26
是啊,我真搞不懂了
东成西就 15:45:51
我现在把这一句提出来单独放到一个存储过程中,看是不是条件判断语句上的逻辑出了问题
罩得住 15:46:04
喔,先搞个简单的过程看看
东成西就 15:59:26
子串错误,我使用的Patindex(',', @AWaterfeeStaetcode) = 0有误
罩得住 16:01:25
是逗号的问题?
东成西就 16:02:24
不是,而应该使用Charindex(',', @AWaterfeestatecode) = 0
罩得住 16:02:55
不会吧,你又没用通配符,两个应该一样的
东成西就 16:03:43
真的
东成西就 16:04:06
是,帮助里都这样说啊,可是结果就不一样
罩得住 16:03:45
换了之后,问题就解决啦?
东成西就 16:04:12
YES
罩得住 16:04:06
喔,奇怪啊
东成西就 16:05:10
不得其解
罩得住 16:05:28
呵呵,解决就行啦
东成西就 16:05:59
谢啦
浙公网安备 33010602011771号