CREATE procedure [dbo].[dt_test]
(
@str varchar(1024), --要分割的字符串
@split varchar(10) --分隔符号
)
as
begin
declare @location int
declare @start int
declare @length int
set @str=ltrim(rtrim(@str))
set @location=charindex(@split,@str)
set @length=1
while @location<>0
begin
set @[email protected]+1
set @location=charindex(@split,@str,@start)
set @[email protected]+1
end
return @length
end
GO
select dbo.dt_test('78,1,2,3',',')
为什么执行后显示:服务器: 消息 208,级别 16,状态 1,行 1
对象名 'dbo.dt_test' 无效。
请指教,是sql2000
------解决方案--------------------
exec dbo.dt_test '78,1,2,3',','
试试,存储过程的调用一般用exec
------解决方案--------------------
------解决方案--------------------
楼主创建的是存储过程,不是函数。存储过程的调用时用EXEC或EXECUTE来。
EXEC dbo.dt_test('78,1,2,3',',')
想取出返回值,可以设置返回参数
- SQL code
CREATE procedure [dbo].[dt_test]( @str varchar(1024), --要分割的字符串 @split varchar(10), --分隔符号 @ReturnValues INT OUTPUT)asbegin declare @location int declare @start int declare @length int set @str=ltrim(rtrim(@str)) set @location=charindex(@split,@str) set @length=1 while @location<>0 begin set @[email protected]+1 set @location=charindex(@split,@str,@start) set @[email protected]+1 end SET @ReturnValues = @length endGO
------解决方案--------------------
这里有个函数可以给你参考一下,也是分字符串的
- SQL code
ALTER function [dbo].[f_split](@SourceSql varchar(8000),@StrSeprate varchar(10))returns @temp table(a varchar(100))--实现split功能 的函数--date :2005-4-20--Author :Dominoasbegindeclare @i intset @SourceSql=rtrim(ltrim(@SourceSql))set @i=charindex(@StrSeprate,@SourceSql)while @i>=1begininsert @temp values(left(@SourceSql,@i-1))set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)[email protected])set @i=charindex(@StrSeprate,@SourceSql)endif @SourceSql<>'\'insert @temp values(@SourceSql)returnend