Yo he utilizado la siguiente función de división,
CREATE FUNCTION dbo.Splitfn(@String varchar(8000), @Delimiter char(1))
returns @temptable TABLE (items varchar(8000))
as
begin
declare @idx int
declare @slice varchar(8000)
select @idx = 1
if len(@String)<1 or @String is null return
while @idx!= 0
begin
set @idx = charindex(@Delimiter,@String)
if @idx!=0
set @slice = left(@String,@idx - 1)
else
set @slice = @String
if(len(@slice)>0)
insert into @temptable(Items) values(@slice)
set @String = right(@String,len(@String) - @idx)
if len(@String) = 0 break
end
return
end
y he usado esta función en una consulta y se ejecutó
ALTER PROCEDURE [dbo].[Employees_Delete]
-- Add the parameters for the stored procedure here
@Id varchar(50)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
if exists(select Emp_Id from Employee where Emp_Id=dbo.Splitfn(@Id,','))
begin
update Employee set Is_Deleted=1 where Emp_Id=dbo.Splitfn(@Id,',')
select 'deleted' as message
end
END
pero cuando excute mi proceso de almacenamiento dando dicen los valores (1,2) tengo el error
Cannot find either column "dbo" or the user-defined
function or aggregate "dbo.Splitfn", or the name is ambiguous.
He comprobado mis funciones de valores de tabla la función 'splitfn' estaba allí, pero no sé lo que está pasando mal? Cualquier sugerencia ...
@Rob funcionó para mí .. Cómo cambiarlo a un TVF en línea .. Guía de Plz –
Hay muchos ejemplos a su alrededor. Aquí hay uno: http://sqlserverpedia.com/blog/sql-server-bloggers/splitting-a-delimited-string-part-1/ –
Gracias por la respuesta. Estaba teniendo el mismo problema y no podía entender por mi vida lo que estaba pasando. Me salvaste un gran dolor de cabeza. – gsirianni