当前位置: 代码迷 >> Sql Server >> 请问:存储过程对象名 'dbo.dt_test' 无效
  详细解决方案

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

热度:459   发布时间:2016-04-27 13:17:02.0
请教:存储过程对象名 '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 @[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
------解决方案--------------------
探讨

楼主你可以写个函数,[email protected] @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 @[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