2010-02-09 9 views
5

Utilizzando Microsoft SQL Server 2005 e versioni successive, quale codice devo utilizzare per verificare che un indirizzo e-mail sia corretto?
Esiste un tipo di dati email?
Esiste un vincolo di controllo della posta elettronica?
Esiste una regola di posta elettronica?
C'è un trigger di posta elettronica?
Esiste una procedura di convalida della convalida della posta elettronica?Convalida e-mail di Microsoft SQL Server

risposta

6

Di solito non si consiglia di utilizzare una procedura memorizzata CLR, ma questo è un buon uso di uno. Le funzionalità di gestione delle stringhe di SQL non sono eccezionali, mentre l'utilizzo di .NET Regex in una stored procedure CLR è semplice ed è possibile utilizzare uno dei numerosi schemi Regex esistenti per soddisfare le proprie esigenze (ad esempio uno dei these). Vedi Regular Expressions Make Pattern Matching And Data Extraction Easier

in mancanza di questo (alcuni DBA sono molto severe su come abilitare la funzione CLR), forse questo potrebbe essere di interesse:

Working with email addresses in SQL Server

Aggiornamento: in risposta alla domanda nei commenti: A CLR stored procedure è un oggetto di database all'interno di un'istanza di SQL Server programmato in un assembly creato in Common Language Runtime (CLR) di Microsoft .NET Framework, ad esempio Visual Basic o C#.

Creazione di una stored procedure CLR in SQL Server prevede le seguenti fasi:

  • Definire la stored procedure come un metodo statico di una classe in una lingua supportata da .NET Framework. Per ulteriori informazioni su come programmare le stored procedure CLR , vedere Procedure memorizzate CLR . Quindi, compila la classe su creando un assembly nel framework .NET utilizzando il compilatore di lingua appropriato.

  • Registrare l'assembly in SQL Server utilizzando l'istruzione CREATE ASSEMBLY . Per ulteriori informazioni su su come utilizzare gli assembly nel server SQL , vedere Assiemi.

  • creare la stored procedure che fa riferimento il gruppo registrato dalla utilizzando l'istruzione CREATE PROCEDURE. Ref.

Vedi Writing CLR Stored Procedures in C# - Introduction to C# (Part 1)

+0

Che cos'è una procedura memorizzata CLR? È lo stesso di una stored procedure? L'acronimo CLR mi ha lasciato perplesso. –

+1

CLR è Common Language Runtime: una stored procedure CLR (o funzione, ecc.) Consente di scrivere una procedura in C# ma di chiamarla direttamente da T-SQL. – onupdatecascade

1

È possibile scrivere SP gestita utilizzando la classe Regex. la convalida dell'e-mail secondo RFC è complessa. Semplicemente interrogiamo AD per l'esistenza dell'utente.

+0

cosa succede se questi sono utenti esterni non in AD? –

+0

Sono d'accordo. La domanda iniziale era come convalidare un indirizzo email, non convalidare che un utente sia in Active Directory. –

+0

@Mitch sì sicuro che funzioni nel nostro caso _special_ –

1

Non esiste un meccanismo integrato in SQL Server per la convalida degli indirizzi di posta elettronica.

Esistono numerose espressioni regolari attorno che convalidano un indirizzo di posta elettronica (alcuni sono molto più lunghi di altri) ad es. here, vedi in particolare "The Official Standard: RFC 2822" reg ex.

Ora, SQL Server non ha il supporto integrato per eseguire espressioni regolari, quindi se si vuole veramente farlo all'interno di SQL, è necessario utilizzare la funzionalità CLR, ad esempio scrivere una funzione .NET che esegue la convalida , che può quindi essere chiamato da SQL.

Tuttavia, mi piacerebbe convalidare l'indirizzo e-mail prima, prima che entri nel database.

+0

Voglio mettere la convalida il più vicino possibile al livello del database. Una regola che non è applicata a livello di database è solo un suggerimento. –

+0

Ho sentito cosa stai dicendo, e non sto dicendo che non sono completamente d'accordo ... ma, almeno dovrebbe * anche * essere fatto prima (cioè prima puoi convalidare l'input e catturare i dati cattivi, prima è il l'utente può essere avvisato == una migliore esperienza utente). Questo è un classico esempio di dove è possibile utilizzare SQL CLR (Common Language Runtime) per ottenere questo a livello di database (codice .NET in esecuzione all'interno di SQL Server) – AdaTheDev

1

Se l'automazione OLE è abilitato, è possibile creare facilmente una funzione definita dall'utente per gestire regex, e poi basta chiamare che:

CASE WHEN dbo.RegExFind 
    (
    '[email protected]', 
    '^[a-z0-9][a-z0-9._-]*@[a-z0-9][a-z0-9.-]*[a-z0-9]\.[a-z][a-z]+$', 
    1 -- Case-insensitive or not 
    ) = 1 THEN 'OK' ELSE 'Not OK' END 

non ricordo dove ho ottenuto il codice per il mio RegExFind() UDF, ma sembra che il codice sia già presente su StackOverflow, here.

Problemi correlati