Hai Jungs,
Ich habe die folgende Split-Funktion verwendet,
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
und ich habe diese Funktion in einer Abfrage verwendet und sie wurde ausgeführt
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
aber wenn ich meine Speicherprozedur ausführe, die Werte gibt, sagen Sie (1,2), erhielt ich den Fehler
Cannot find either column "dbo" or the user-defined
function or aggregate "dbo.Splitfn", or the name is ambiguous.
Ich habe meine tabellarisch bewerteten Funktionen überprüft, die Funktion 'splitfn' war da, aber ich weiß nicht, was falsch läuft? Irgendwelche Vorschläge..
Es ist eine Tabellenfunktion, die Sie jedoch als Skalarfunktion verwenden.
Versuchen:
where Emp_Id IN (SELECT i.items FROM dbo.Splitfn(@Id,',') AS i)
Aber ... überlegen Sie auch, Ihre Funktion in eine Inline-TVF umzuwandeln, da diese eine bessere Leistung erbringt.
Sie müssen eine Tabelle mit dem Wert udf wie eine Tabelle behandeln, z. B. JOIN
select Emp_Id
from Employee E JOIN dbo.Splitfn(@Id,',') CSV ON E.Emp_Id = CSV.items
Eine allgemeine Antwort
select * from [dbo].[SplitString]('1,2',',') -- Will work
aber
select [dbo].[SplitString]('1,2',',') -- will not work and throws this error
Da die Leute von Google kommen, stellen Sie sicher, dass Sie sich in der richtigen Datenbank befinden.
Wenn Sie SQL in der 'master'-Datenbank ausführen, wird dieser Fehler häufig zurückgegeben.