Backup e restore apparentemente non completo

di il
3 risposte

Backup e restore apparentemente non completo

Ho un database di SQLServer 2014. Lo sto riempendo di dati utilizzando il buon vecchio VB6 tramite codice ADO, stored procedures ed anche una "funzione" (che ho creato con SSMS in "master - Programmabilità" - "Funzioni" - "Funzioni con valori di tabella").
Tutto OK, comprese le funzionalità della funzione (perdonate il bisticcio).
Ho poi creato un backup.
BACKUP DATABASE WSQL TO DISK = 'D:\ArchiviWSQL\CopieBackup\WSQL 2018-08-21 11-48.bak'
Su un altro computer ho poi effettuato il restore ma sembra che la funzione non sia compresa nel backup perchè appare l'errore in cui mi viene segnalato che il nome dell'oggetto "master.dbo.udf_IdSplitter" non è valido (udf_IdSplitter è appunto il nome della funzione).
Sono nuovo dell'ambiente SQLServer per cui sicuramente mi è sfuggito uno o più passaggi.
Devo creare anche un backup di master e, corrispondentemente, un restore di master ?
Non c'è modo di inglobare, in un solo file e con una sola operazione, il backup ed il restore ?
Grazie anticipatamente per l'aiuto che vorrete prestarmi.

3 Risposte

  • Re: Backup e restore apparentemente non completo

    La funzione non c'è proprio perché non è nel tuo db ma in master. Perché non l'hai creata nel tuo db?
  • Re: Backup e restore apparentemente non completo

    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.
  • Re: Backup e restore apparentemente non completo

    Non usare più master.dbo.udf_IdSplitter ma dbo.udf_IdSplitter o semplicemente udf_IdSplitter
Devi accedere o registrarti per scrivere nel forum
3 risposte