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à?

È stato utile?

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:

Come realizzare SQL Server 2008 Controllare il vincolo di una tabella Consenti solo determinati caratteri?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top