Grazie dell'interessamento.
E' proprio così: la funzione è in master e non nel mio db. Errore dovuto a ignoranza.
Ho provato a cancellare le funzioni (sono 2) da master e crearle nel db ma appare un errore: "Il nome di oggetto 'master.dbo.udf_IdSplitter' non è valido."
Però se le funzioni sono in master essere producono perfettamente il risultato desiderato.
Questa è la prima funzione :
USE [NomeDb]
GO
/****** Object: UserDefinedFunction [dbo].[udf_CodeSplitter] Script Date: 21/08/2018 18:36:10 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO
--The following is a general purpose UDF to split comma separated lists into individual items.
--Consider an additional input parameter for the delimiter, so that you can use any delimiter you like.
-- edc 01.SEP.05
-- adattamento da http://vyaskn.tripod.com/passing_arrays_to_stored_procedures.htm
-- edc 20.sep.06
-- adattato per le stringhe
CREATE FUNCTION [dbo].[udf_CodeSplitter]
(
@CodeList varchar(MAX)
)
RETURNS
@ParsedList table
(
OneCode varchar(10) -- adjust the single element length to fit your needs
)
AS
BEGIN
DECLARE @Pos int, @OneCode varchar(10) -- adjust the single element length to fit your needs
SET @CodeList = LTRIM(RTRIM(@CodeList))+ ','
SET @Pos = CHARINDEX(',', @CodeList, 1)
IF REPLACE(@CodeList, ',', '') <> ''
BEGIN
WHILE @Pos > 0
BEGIN
SET @OneCode = LTRIM(RTRIM(LEFT(@CodeList, @Pos - 1)))
IF @OneCode <> ''
BEGIN
INSERT INTO @ParsedList (OneCode) VALUES (@OneCode)
END
SET @CodeList = RIGHT(@CodeList, LEN(@CodeList) - @Pos)
SET @Pos = CHARINDEX(',', @CodeList, 1)
END
END
RETURN
END
e questa la seconda
USE [NomeDb]
GO
/****** Object: UserDefinedFunction [dbo].[udf_IDSplitter] Script Date: 21/08/2018 18:44:43 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO
--The following is a general purpose UDF to split comma separated lists into individual items.
--Consider an additional input parameter for the delimiter, so that you can use any delimiter you like.
-- edc 01.SEP.05
-- adattamento da http://vyaskn.tripod.com/passing_arrays_to_stored_procedures.htm
--
CREATE FUNCTION [dbo].[udf_IDSplitter]
(
@IDList varchar(MAX)
)
RETURNS
@ParsedList table
(
OneID int
)
AS
BEGIN
DECLARE @OneID varchar(10), @Pos int
SET @IDList = LTRIM(RTRIM(@IDList))+ ','
SET @Pos = CHARINDEX(',', @IDList, 1)
IF REPLACE(@IDList, ',', '') <> ''
BEGIN
WHILE @Pos > 0
BEGIN
SET @OneID = LTRIM(RTRIM(LEFT(@IDList, @Pos - 1)))
IF @OneID <> ''
BEGIN
INSERT INTO @ParsedList (OneID)
VALUES (CAST(@OneID AS int)) --Use Appropriate conversion
END
SET @IDList = RIGHT(@IDList, LEN(@IDList) - @Pos)
SET @Pos = CHARINDEX(',', @IDList, 1)
END
END
RETURN
END
Come si è capito il mio ruolo, vista la mia inesperienza, è solamente quello di fare qualche copia e incolla di funzioni trovate in rete.