none
Stored di procedure con ALTER VIEW RRS feed

  • Domanda

  • Sono ancora troppo novellino con le Stored e certamente sto annegando in un bicchier d'acqua

    Ho 2 VIEW che contengono il GETDATE() e si eseguono in coppia
    il problema è che passano alcuni istanti fra la prima e la seconda
    quindi i 2 valori di GETDATE() risultano diversi,

    Sarebbe irrilevante,   ma io sono precisino  :)

    La soluzione potrebbe essere una Stored che mi fa il ALTER VIEW delle 2 viste
    con uno stesso valore di GETDATE() dichiarato all'inizio

    Io vorrei farle cosi:
    --  SELECT Id, D1, D2, DT FROM dbo.T1 WHERE (DT < N'2015-11-04T01:16:24');

    Invece mi sto incasinando con gli apici pertanto al masimo sono arrivato a questo
    --  SELECT Id, D1, D2, DT FROM dbo.T1 WHERE DT < 42310.07;

    Come posso migliorarla ?????
    Quale è la regola per inserire degli apici all'interno di una stringa delimitata da apici ????

    Grazie  :)

    USE [DBTest]
    GO
    /****** Object:  StoredProcedure [dbo].[H08]    Script Date: 04/11/2015 01:24:01 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- Batch submitted through debugger: SQLQuery64.sql|7|0|C:\Users\I80\AppData\Local\Temp\~vs678F.sql
    
    ALTER PROCEDURE [dbo].[H08] 
    AS 
    
    DECLARE @dtm AS varchar(10) 
    SET @dtm = CAST(GETDATE() AS money)
    
    DECLARE @sql AS varchar(300)
    SET @sql = 
    '
    ALTER VIEW dbo.V1 AS 
    SELECT Id, D1, D2, DT FROM dbo.T1 WHERE DT < ' + @dtm + ';
    '
    -- SELECT Id, D1, D2, DT FROM dbo.T1 WHERE (DT < N'2015-11-04T01:16:24')
    
    print @sql
    exec(@sql)
    • Modificato Mancini, mercoledì 4 novembre 2015 00:45
    mercoledì 4 novembre 2015 00:41

Risposte

  • Ciao Mancini,

    la regola per inserire i delimitatori di stringa (quali essi siano) all'interno di una stringa delimitata è quella di raddoppiare i delimitatori

    ALTER PROCEDURE [dbo].[H08] AS
    DECLARE @dtm AS varchar(23)
    SET @dtm = REPLACE(CONVERT(Varchar(23),GETDATE(),121),'-','')
    DECLARE @sql AS varchar(300)
    SET @sql =
    '
    ALTER VIEW dbo.V1 AS
    SELECT Id, D1, D2, DT
    FROM dbo.T1
    WHERE DT < ''' + @dtm + ''';
    '
    -- SELECT Id, D1, D2, DT FROM dbo.T1 WHERE (DT < N'2015-11-04T01:16:24')
    print @sql
    exec(@sql)

    per la data conviene utilizzare il formato ISO YYYYMMDD definito nell'help della funzione CAST-CONVERT così non ti devi preoccupare della localizzazione della connessione.
    Se non ti interessano i millisecondi utilizza il parametro stile 120 della funzione CONVERT

    Ciao
    Giorgio Rancati


    mercoledì 4 novembre 2015 19:24
    Moderatore

Tutte le risposte

  • Ciao Mancini,

    la regola per inserire i delimitatori di stringa (quali essi siano) all'interno di una stringa delimitata è quella di raddoppiare i delimitatori

    ALTER PROCEDURE [dbo].[H08] AS
    DECLARE @dtm AS varchar(23)
    SET @dtm = REPLACE(CONVERT(Varchar(23),GETDATE(),121),'-','')
    DECLARE @sql AS varchar(300)
    SET @sql =
    '
    ALTER VIEW dbo.V1 AS
    SELECT Id, D1, D2, DT
    FROM dbo.T1
    WHERE DT < ''' + @dtm + ''';
    '
    -- SELECT Id, D1, D2, DT FROM dbo.T1 WHERE (DT < N'2015-11-04T01:16:24')
    print @sql
    exec(@sql)

    per la data conviene utilizzare il formato ISO YYYYMMDD definito nell'help della funzione CAST-CONVERT così non ti devi preoccupare della localizzazione della connessione.
    Se non ti interessano i millisecondi utilizza il parametro stile 120 della funzione CONVERT

    Ciao
    Giorgio Rancati


    mercoledì 4 novembre 2015 19:24
    Moderatore
  • Ok,   Grazie
    Adesso mi è tutto più chiaro

    Mancini

    giovedì 5 novembre 2015 00:55