Bonjour,
comment puis je faire pour créer un champ par exemple 'Structure' nvarchar(50) et je ne souhaite que l'on puisss y insérer que "SARL" ou "EURL" ou "SAS"
en fait comment faire un check dans sql manager studio 2008 ?
merci
Version imprimable
Bonjour,
comment puis je faire pour créer un champ par exemple 'Structure' nvarchar(50) et je ne souhaite que l'on puisss y insérer que "SARL" ou "EURL" ou "SAS"
en fait comment faire un check dans sql manager studio 2008 ?
merci
Bonjour,
Tout d'abord, pourquoi utiliser le type NVARCHAR ? Cela consomme 2 octets pour tout caractère puisque vous stockez les chaînes en unicode.
Si vous utilisez VARCHAR, vous n'utiliseriez qu'un seul octet par caractère.
N'utilisez les types NCHAR et NVARCHAR que lorsque vous avez besoin de stocker des caractères non-latins (chinois, japonais, coréen, thaï, arabe, hébreux, arménien ...)
Pour votre contrainte de domaine, vous pouvez exécuter, dans SQL Server Management Studio :
Mais vous pouvez allez plus loin en écrivant une fonction pour cela :Code:
1
2 ALTER TABLE maTable ADD Structure VARCHAR(5) NOT NULL CONSTRAINT CHK_maTable_Structure CHECK (Structure NOT IN ('SARL', 'EURL', 'SAS'))
Et ensuite, pour votre table :Code:
1
2
3
4
5
6
7
8
9
10
11 CREATE FUNCTION Fn_Check_Structure_Nom @nomStructure VARCHAR(5) RETURNS BIT WITH SCHEMABINDING AS BEGIN RETURN CASE WHEN @nomStructure IN ('SARL', 'EURL', 'SAS') THEN CAST(0 AS BIT) ELSE 1 END END
Ainsi si vous devez retirer ou ajouter une valeur pour votre contrôle, il vous suffit de mettre à jour la fonction, pas la contrainte ;)Code:
1
2 ALTER TABLE maTable ADD Structure VARCHAR(5) NOT NULL CONSTRAINT CHK_maTable_Structure CHECK(dbo.Fn_Check_Structure_Nom(Structure) = 1)
Vous pouvez aussi utiliser cette fonction pour interroger une table de valeurs interdites pour votre contrainte ...
@++ ;)
OUAH!!! merci pour cette réponse ultra compléte et surtout merci d'avor mis un exemple :)