Come creare indice su campo tipo varchar

di il
8 risposte

Come creare indice su campo tipo varchar

Ho un database SqlServer sul quale ho la necessità di dover creare in una tabella un indice su campo di tipo Varchar.
Utilizzo SSMS ma non trovo modo di crearlo.
Mi sono loggato come utente "sa" quindi con dititti amministativi
Dettaglio meglio la specifica illustata nello screenshot allegato.

Tabella: Anadip

Campo in cui necessita creare indice di tipo univoco: UserId
Tipo di campo: Varchar

Nelle proprietà colonna per il campo UserId è impostato in maniera non modificabile il valore "No" su Indicizzazione.

Avrei la necessità di dover creare un indice univoco sul campo UserId.

ho fatto click destro sul campo UserId e selezionato indici/chiavi.
Riesco ad accedere al menu per la creazione del nuovo indice, ma nella form di selezione dei campi per i quali attivare il nuovo indice
vengono visualizzati solo campi numerici, mentro ho la necessità di attivarlo per il campo UserId di tipo varchar.

come posso fare ?

Grazie

Moreno
Allegati:
19656_7a36c8d76753beff283c1d7c20695a5b.jpg
19656_7a36c8d76753beff283c1d7c20695a5b.jpg

8 Risposte

  • Re: Come creare indice su campo tipo varchar

    Salve.
    personalmente NON uso mai i designer, perche' facendo tutto "brevi manu" almeno il risultato e' sicuramente quello desiderato

    detto cio', il "compito" in T-SQL sicuramente NON e' difficile; trivialmente,
    CREATE DATABASE [newDb];
    GO
    USE [newDb];
    GO
    CREATE TABLE [dbo].[AnaDip] (
    	Matricola int NOT NULL primary key,
    	-- .....
    	UserId nvarchar(100) NOT NULL
    	-- , .....	
    	);
    GO
    CREATE UNIQUE NONCLUSTERED INDEX [IX_AnaDip$UserId$U] ON [dbo].[AnaDip]
    	( 	[UserId] ASC	) 
    GO
    USE [master];
    GO
    DROP DATABASE [newDb];
    
    ovviamente questo "funziona" in quanto il dimensionamento della colonna NON E' = MAX... visto che i LOB non supportano indicizzazione:
    https://docs.microsoft.com/it-it/sql/t-sql/statements/create-index-transact-sql?view=sql-server-2017

    questo riporta la questione alla tua definizione della tabella... TUTTE le colonne testuali sono nvarchar(MAX), e NON credo che questa sia una specifica da parte dell'analisi... personalmente avrei anche dubbi sul fatto che l'attributo [Matricola] debba essere definito nel dominio degli interi...
    sempre personalmente, riguarderei TUTTA la definizione della tabella
    saluti omnia
    --
    Andrea
  • Re: Come creare indice su campo tipo varchar

    Si, ma occhio a quei drop database
  • Re: Come creare indice su campo tipo varchar

    Salve golosauro,
    perche' "occhio ai drop database"? cosa intendi?

    mi hanno sempre insegnato 2 cose...
    1) da parte di "chi chiede", non lasciare che chi vorrebbe aiutarti debba "impazzire" a rigenerare lo scenario che si ha in mente, quindi ovviamente preparare gli script DDL piu' gli script di insert per popolare lo scenario come necessario, possibilmente "semplificati" in modo da non "offendere" nessuno...

    2) da parte sia di "chi chiede" ma anche di "chi risponde", e' sempre bene lasciare la macchina di chi eseguira' gli script nel medesimo stato in cui la si trova...

    fedele a questa filosofia, ho generato un nuovo db, ci ho giocato dentro, ed al termine viene eseguito il clean up...
    piu' pulito di cosi'
    saluti omnia
    --
    Andrea
  • Re: Come creare indice su campo tipo varchar

    1) seee come no! 1/1000 se sei fortunato.
    2) la tua filosofia non ha senso: se dopo aver eseguito il tuo script torna tutto come prima, tanto vale non eseguirlo affatto!
    L'appunto di @golosauro è molto importante:
    - per chi "chiede" che rischia, se non fa attenzione, di vedersi sparire il database (1)(2)
    - per chi "risponde" bisogna cercare di non incasinare la vita del prossimo con risposte troppo complicate.
    La mia filosofia è che meglio nessun aiuto piuttosto che un pessimo aiuto: la via dell'inferno è lastricata di buone intenzioni
    N


    (1) molti di quelli che chiedono, spesso, non hanno l'esperienza necessaria per accorgersi di queste "piccolezze"
    (2) non penserai che abbiano fatto il backup prima di fare le prove???
  • Re: Come creare indice su campo tipo varchar

    Salve Nicolap...
    In questo forum sono un niubbio... Ripeto, in questo forum...
    Ho lurkato un po', prima di iscrivermi, perché mi interessano molto i contributi in fattura elettronica... Poi, malgrado tutto, mi sono iscritto e ho anche così pensato di dare il mio irrilevante contributo.. Sempre e solo su questa piattaforma mi sono spesso stupito dagli atteggiamenti, ed è anche questo il caso...
    Dici
    2) la tua filosofia non ha senso: se dopo aver eseguito il tuo script torna tutto come prima, tanto vale non eseguirlo affatto
    Ma l'hai letto? Non penso di dover fare i compiti agli altri, ma ciò non toglie che se una persona esegue uno script scritto da altri, almeno questi ultimi si preoccupino di non lasciare strascichi più o meno indesiderati... E così ho fatto...
    (2) non penserai che abbiano fatto il backup prima di fare le prove???
    Ed infatti, non dovrebbe essere necessario... Come non lo è in questo caso... Il mio script non cancella niente che non abbia generato io, è quindi innocuo...

    Flame/On So che è un problema mio, ma qui continuo a stupirmi... Ho scritto per anni su it.comp.lang.xx, nella gerarchia miscrosoft.xx, altri forum, anche americani, ma raramente ho visto la facilità di aprire flames come qui... Non sei/siete sicuramente obbligati ad essere d'accordo con me o altri, su qualsiasi argomento, nessuno ha la verità in bocca, questo è implicito... Ma sulla ragionevolezza e rispetto direi di sì...
    nessuno è autorizzato a mancare di rispetto...
    Non leggermi, se vuoi, non devo convincere nessuno, come non mi aspetto niente in generale Flame/Off
    E... Malgrado mi stupisca, continuerò a frequentare, perché ci sono argomenti interessanti.
    Grazie e saluti omnia
    --
    Andrea
  • Re: Come creare indice su campo tipo varchar

    asql ha scritto:


    Flame/On So che è un problema mio, ma qui continuo a stupirmi... Ho scritto per anni su it.comp.lang.xx, nella gerarchia miscrosoft.xx, altri forum, anche americani, ma raramente ho visto la facilità di aprire flames come qui... Non sei/siete sicuramente obbligati ad essere d'accordo con me o altri, su qualsiasi argomento, nessuno ha la verità in bocca, questo è implicito... Ma sulla ragionevolezza e rispetto direi di sì...
    nessuno è autorizzato a mancare di rispetto...
    Non leggermi, se vuoi, non devo convincere nessuno, come non mi aspetto niente in generale Flame/Off
    E... Malgrado mi stupisca, continuerò a frequentare, perché ci sono argomenti interessanti.
    Grazie e saluti omnia
    --
    Andrea
    Se prendi per personali cose che non lo sono... fatti tuoi!

    Quello che ho cercato di spiegare è che molti che passano per il forum ha chiedere aiuto hanno un livello di competenze molto basso e quindi bisogna stare attenti a quello che gli si dice. Mettere un "drop database" al primo che passa è una follia!
    Puoi metterlo a uno che sai essere sufficientemente competente.
  • Re: Come creare indice su campo tipo varchar

    asql ha scritto:


    Salve golosauro,
    perche' "occhio ai drop database"? cosa intendi?

    mi hanno sempre insegnato 2 cose...
    1) da parte di "chi chiede", non lasciare che chi vorrebbe aiutarti debba "impazzire" a rigenerare lo scenario che si ha in mente, quindi ovviamente preparare gli script DDL piu' gli script di insert per popolare lo scenario come necessario, possibilmente "semplificati" in modo da non "offendere" nessuno...

    2) da parte sia di "chi chiede" ma anche di "chi risponde", e' sempre bene lasciare la macchina di chi eseguira' gli script nel medesimo stato in cui la si trova...

    fedele a questa filosofia, ho generato un nuovo db, ci ho giocato dentro, ed al termine viene eseguito il clean up...
    piu' pulito di cosi'
    saluti omnia
    --
    Andrea
    Ciao Andrea,
    io ho capito benissimo cosa avevi fatto. Solo che temevo che un utente poco esperto potesse non capire del tutto le istruzioni che avevi scritto e magari erroneamente applicarle a un db esistente con altre tabell (magari piene).
  • Re: Come creare indice su campo tipo varchar

    misonsan ha scritto:


    Ho un database SqlServer sul quale ho la necessità di dover creare in una tabella un indice su campo di tipo Varchar.
    Utilizzo SSMS ma non trovo modo di crearlo.
    Mi sono loggato come utente "sa" quindi con dititti amministativi
    Dettaglio meglio la specifica illustata nello screenshot allegato.

    Tabella: Anadip

    Campo in cui necessita creare indice di tipo univoco: UserId
    Tipo di campo: Varchar

    Nelle proprietà colonna per il campo UserId è impostato in maniera non modificabile il valore "No" su Indicizzazione.

    Avrei la necessità di dover creare un indice univoco sul campo UserId.

    ho fatto click destro sul campo UserId e selezionato indici/chiavi.
    Riesco ad accedere al menu per la creazione del nuovo indice, ma nella form di selezione dei campi per i quali attivare il nuovo indice
    vengono visualizzati solo campi numerici, mentro ho la necessità di attivarlo per il campo UserId di tipo varchar.

    come posso fare ?

    Grazie
    Se vuoi utilizzare il designer di SSMS devi :

    1) selezionare la tabella ( Anadip )
    2) Pulsante dx e seleziona Design
    3) In alto a sx ti si dovrebbero apparire delle icone, devi cliccare su quella che come tooltip ti dice "Manage Indexes and Keys"
    4) A questo punto puoi procedere a crearti l'indice sul campo che ti serve.
Devi accedere o registrarti per scrivere nel forum
8 risposte