Come devo gestire i parametri di stored procedure che devono avere la stessa lunghezza di una colonna?

0

Sto scrivendo un sacco di stored procedure per un database SQL Server che accetta un id o un codice che è un CHAR invece di un INT . La maggior parte di questi non ha cambiato la dimensione in un tempo lungo, ma quando un cliente vuole aumentare le dimensioni che generalmente facciamo. Questo non sarebbe un problema tranne il fatto che qualsiasi stored procedure con un parametro digitato CHAR(4) si interromperà all'improvviso.

Ho tre idee per mantenere le dimensioni delle colonne in un'unica posizione, ma non so se mi piacciono. Per prima cosa è sufficiente utilizzare un tipo molto più grande del necessario, ad esempio VARCHAR(100) . Ci sono conseguenze negative per questo oltre alla mancanza di chiarezza nel codice?

Secondo è che gli script che generano le procedure cercano la dimensione della colonna per definire dinamicamente i loro tipi di variabile. Sarebbe meglio, ma non sono sicuro che sarebbe possibile senza un sacco di SQL dinamico, e avremmo ancora bisogno di rieseguire tutti gli script quando qualcosa è cambiato.

Infine, ogni volta che uno script aggiorna le dimensioni di una colonna, potrebbe anche andare e aggiornare tutte le stored procedure che fanno riferimento ad essa. Mi piace di più, ma in una grande organizzazione con molti programmatori sarebbe facile per qualcuno dimenticare o perdere una procedura.

So che usare INT ids o un ORM dovrebbe evitare del tutto il problema, ma sfortunatamente c'è già un sacco di codice usando le stringhe, e il refactoring del database non è una priorità aziendale.

    
posta Andrew Piliser 20.07.2016 - 20:07
fonte

1 risposta

2

Devi dichiarare la variabile come del tipo di colonna di una tabella. In questo modo se la colonna della tabella cambia, la procedura di memorizzazione non deve cambiare.

v_myvar owner.table.column%type;
    
risposta data 20.07.2016 - 20:18
fonte