none
CASE WHEN ERRORE!!! RRS feed

  • Domanda

  • SALVE

    ho 2 campi

    CAMPO6 INT

    CAMPO3 INT

    non capisco come mai in SQL server 2008 mi accetta

    case when campo6 <> campo3 then -1 else 0 end

    mentre con Sql 2016

    la stringa non me la accetta mettendola tra apici

    'case when campo6 <> campo3 then -1 else 0 end' e quindi la considera testo

    mercoledì 10 maggio 2017 09:26

Risposte

  • ho provato direttamente su SSMS 2016

    che questi problemi non sussistono

    non capisco come mai con SSMS 2008 collegato a un database 2016 mi da' dei problemi di sintassi

    GRAZIE COMUNQUE DELL'AIUTO - spiegando mi ha aiutato molto!!!

    mercoledì 10 maggio 2017 14:30

Tutte le risposte

  • Servirebbe un po' di contesto... Potresti includere la query dove ottieni errore?
    mercoledì 10 maggio 2017 09:39
  • anche un po' di maggior chiarezza espositiva, se possibile...

    Edoardo Benussi
    Microsoft MVP - Cloud and Datacenter Management
    edo[at]mvps[dot]org

    mercoledì 10 maggio 2017 09:48
    Moderatore
  • scusate, pensavo di essere stato chiato.

    io una tabella con parecchi campi.

    2 in particolare

    CAMPO6 di tipo (INT, NOT NULL)

     CAMPO3 di tipo (INT, NOT NULL)

    avevo creato una vista
    SELECT     CAMPO6, CAMPO3,
                     CASE WHEN [CAMPO6] <> [CAMPO3] THEN 'DIVERSO' ELSE '==' END AS Expr1,
                     CASE WHEN [CAMPO6] <> [CAMPO3] THEN - 1 ELSE 0 END AS Expr2
    FROM         dbo.myOldTable

    ora e' migrato tutto a SQL 2016 i campi sono rimasti INT ma not null

    CAMPO6 di tipo (INT, NOT NULL)

     CAMPO3 di tipo (INT, NOT NULL)

    riscrivendo la VISTA

    SELECT     CAMPO6, CAMPO3,
                     CASE WHEN [CAMPO6] <> [CAMPO3] THEN 'DIVERSO' ELSE '==' END AS Expr1,
                     CASE WHEN [CAMPO6] <> [CAMPO3] THEN - 1 ELSE 0 END AS Expr2
    FROM         dbo.mynewTable

    mi da' errore e mi mettere l'apice daventi ai 2 campi calcolati e qundi stringhe

    mercoledì 10 maggio 2017 10:02
  • perchè scrivi:

    "i campi sono rimasti INT ma not null"

    visto che anche prima del passaggio a sql2016 erano così ?

    per campi calcolati intendi Expr1 e Expr2 ?


    Edoardo Benussi
    Microsoft MVP - Cloud and Datacenter Management
    edo[at]mvps[dot]org

    mercoledì 10 maggio 2017 10:19
    Moderatore
  • GRAZIE prima di tutto dell'interessamento.

    dal passaggio da 2008 a 2016 chi ha riscritto la tabella ha mantenuto

    stesso nome dei campi e TIPO

    nei 2 campi specifici mentre prima erano NULL

    ora sono NOT NULL (scusa, nel copia incolla non ho modificato)

    il problema e' proprio per Expr1 e Expr2 che non risco piu' a riscriverle

    mercoledì 10 maggio 2017 10:37
  • ok, chiarito l'errore di copia/incolla torniamo ai due campi calcolati.

    se capisco bene Expr1 può assumere come valore solo una stringa mentre Expr2 solo un numero.

    per caso hai omesso qualcosa ?

    questa cosa deve per caso restituirti una stringa che sia un'istruzione in c# ?


    Edoardo Benussi
    Microsoft MVP - Cloud and Datacenter Management
    edo[at]mvps[dot]org

    mercoledì 10 maggio 2017 10:45
    Moderatore
  • e' una vista in SQL e sara' utilizzata poi per visualizzare o filtrare dei dati.

    servirà sia in Vb.net ma anche solo in MsAccess

    ho scritto Expr1 e Expr2 perche' 

    nella vecchia vista utilizzavo

                     CASE WHEN [CAMPO6] <> [CAMPO3] THEN - 1 ELSE 0 END AS Expr2

    pensando che qui (2016) non funziona ne' uno ne' l'altra ho lasciato le due prove

                     CASE WHEN [CAMPO6] <> [CAMPO3] THEN - 1 ELSE 0 END AS Expr2
                     CASE WHEN [CAMPO6] <> [CAMPO3] THEN 'DIVERSO' ELSE '==' END AS Expr1,


    mercoledì 10 maggio 2017 10:56
  • Ciao.

    Ma l'errore quindi si presenta a livello di Management Studio, quando provi a lanciare la vista?


    Puoi riportare l'errore?
    mercoledì 10 maggio 2017 10:58
  • se scrivo nella "visualizzazione struttura"

    scrivendo

    CASE WHEN [CAMPO6] <> [CAMPO3] THEN - 1 ELSE 0 END

    eseguendo

    mi mette L'APICE davati e dietro

    'CASE WHEN [CAMPO6] <> [CAMPO3] THEN - 1 ELSE 0 END '

    e quindi mi scrive la stringa per ogni record

    mercoledì 10 maggio 2017 11:25
  • Scusami la domanda, forse banale: quale à 'visualizzazione struttura'?

    E' un termine che mi sembra più da Office che da SSMS ... (Access?)

    mercoledì 10 maggio 2017 12:05
  • intendo se scrivo in riquadro SQL o Criteri

    e poi eseguo la stringa SQL

    mercoledì 10 maggio 2017 12:27
  • se lo scrivo nel riquadro SQL

    ed eseguo

    mi appare un messaggio

    Error en la cláusula SELECT: expresión junto a 'campo6'.
    No se puede analizar el texto de la consulta.

    mercoledì 10 maggio 2017 13:37
  • Quindi, provando ad eseguire

    SELECT     CAMPO6, CAMPO3,
                     CASE WHEN [CAMPO6] <> [CAMPO3] THEN 'DIVERSO' ELSE '==' END AS Expr1,
                     CASE WHEN [CAMPO6] <> [CAMPO3] THEN - 1 ELSE 0 END AS Expr2
    FROM         dbo.mynewTable

    ti dà l'errore?

    (scusa per queste domande, forse stupide, ma è per circoscrivere il problema)

    mercoledì 10 maggio 2017 14:22
  • ho provato direttamente su SSMS 2016

    che questi problemi non sussistono

    non capisco come mai con SSMS 2008 collegato a un database 2016 mi da' dei problemi di sintassi

    GRAZIE COMUNQUE DELL'AIUTO - spiegando mi ha aiutato molto!!!

    mercoledì 10 maggio 2017 14:30
  • Di nulla.

    Fai attenzione quando cerchi di collegarti con un SSMS di una versione precedente ad un SQL più recente: per esperienza, potresti avere comportamenti imprevedibili.

    mercoledì 10 maggio 2017 14:42
  • grazie del consiglio
    mercoledì 10 maggio 2017 18:39