首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请问:存储过程对象名 'dbo.dt_test' 无效

2012-04-25 
请教:存储过程对象名 dbo.dt_test 无效CREATE procedure[dbo].[dt_test](@str varchar(1024), --要分割

请教:存储过程对象名 'dbo.dt_test' 无效
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 @start=@location+1 
set @location=charindex(@split,@str,@start) 
set @length=@length+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
[解决办法]

探讨

楼主你可以写个函数,或者在存储过程中价格返回@length的参数 @length int output
执行存储过程用 exec
或者这样
EXEC@return_value = [dbo].[dt_test]
@str = N'78,1,2,3',
@split = N','

SELECT'Return Value' = @return_value

[解决办法]
楼主创建的是存储过程,不是函数。存储过程的调用时用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 @start=@location+1 set @location=charindex(@split,@str,@start) set @length=@length+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)-@i)set @i=charindex(@StrSeprate,@SourceSql)endif @SourceSql<>'\'insert @temp values(@SourceSql)returnend 

热点排行