Come impostare un vincolo per limitare il campo Char a un insieme di valori?
-
13-11-2019 - |
Domanda
Oggi sto avendo una scoreggia cerebrale. In SQL Server (attualmente utilizzando il 2008), come posso impostare un campo char per accettare solo una serie specifica di caratteri (circa otto lettere sensibili al caso)? E ho bisogno di riutilizzare questo "campo personalizzato" in diverse tabelle.
So che potrei impostare un altro tavolo e inserire un vincolo di chiave estera. E 'l'unica possibilità?
Soluzione
Se si utilizza il doppio costrutto negativo, questo consente solo Chars A a H
ALTER TABLE MyTable WITH CHECK
CONSTRAINT CK_MyTable_MyColChars CHECK (
MyColChars COLLATE Latin1_General_BIN NOT LIKE '%[^ABCDEFGH]%'
)
Per il riutilizzo, usa un UDF
CREATE FUNCTION dbo.CheckChars (@Value varchar(100))
RETURNS bit
AS
BEGIN
RETURN (CASE WHEN @Value NOT LIKE '%[^ABCDEFGH]%' THEN 1 ELSE 0 END)
END
GO
... CHECK (
dbo.CheckChars (MyColChars) = 1
)
Se volevi a_f, semi-colon e spazio sarebbe '%[^ABCDEF; ]%'
Per esempio
Altri suggerimenti
Probabilmente vorrai cercare nella creazione di un vincolo di assegno. Questo post ha un modello di abbinamento di cui potresti costruire:
Per ottenere la corrispondenza sensibile al caso, rimuovere 'AZ' nel modello e creare il vincolo di controllo con una raccolta sensibile al caso. Ciò garantisce una corrispondenza sensibile al caso anche se il server e il database sono insensibili al caso.