Question de triggersment du server SQL

Je ne suis en aucun cas un programmeur de sql et j'essaye d'accomplir quelque chose que je suis assez sûr que cela a été fait un million de fois avant.

J'essaye de générer automatiquement un numéro de client en sql chaque fois qu'un nouveau client est inséré, mais le triggersur (ou sp?) Ne fonctionnera que si au less le prénom, le nom et une autre valeur appelée numéro de dossier sont entrés. Si l'un de ces champs est manquant, le système génère une erreur. Si les critères sont remplis, le système génère et atsortingbue un identifiant unique à ce client qui commence par les lettres GL- et utilise ensuite un nombre à 5 numbers pour qu'un client John Doe soit GL-00001 et que Jane Doe soit GL-00002.

Je suis désolé si je request trop, mais je suis fondamentalement un gars mise à jour de sélection et rien de plus, merci d'avance pour toute aide.

Si j'étais dans cette situation, je:

–Alter la table (s) de sorte que le prénom, le nom et le numéro de cas sont des colonnes obligatoires (NOT NULL). Gérez vos chèques pour les champs obligatoires du côté de l'application avant de soumettre l'logging à la database.

– S'il n'existe pas, ajoutez une colonne d'identité à la table client.

– Ajouter une colonne calculée persistante à la table client qui va formater la colonne d'identité dans le format GL-00000 souhaité.

 /* Demo computed column for customer number */ create table #test ( id int identity, customer_number as 'GL-' + left('00000', 5-len(cast(id as varchar(5)))) + cast(id as varchar(5)) persisted, name char(20) ) insert into #test (name) values ('Joe') insert into #test (name) values ('BobbyS') select * from #test drop table #test 

Cela devrait satisfaire vos exigences sans avoir besoin d'introduire le surcoût d'un triggersur.

Alors qu'est-ce que vous voulez faire? générer un numéro de client même si ces champs ne sont pas renseignés?

Avez-vous regardé le SQL pour le triggersur? Vous pouvez le faire dans SSMS (SQL Server Managment Studio) en accédant à la table en question dans l'Explorateur d'objects, en développant la table puis en développant les triggersurs.

Si vous ouvrez le triggersur, vous verrez ce qu'il fait pour générer le numéro de client. Si vous ne savez pas comment ce code fonctionne, alors postz le code pour le triggersment.

Si vous apportez des modifications à un système existant, je vous conseillerais de découvrir toutes les implications de la modification de la manière dont datatables sont inputs.

Par exemple, d'autres parties de l'application peuvent dépendre de toutes les valeurs initiales étant remplies, donc après avoir modifié le triggersur pour permettre l'ajout de données incomplètes, vous pouvez casser quelque chose d'autre.

Vous avez probablement une contrainte unique et / ou des contraintes NOT NULL définies sur la table.

Supprimez / désactivez-les (par exemple avec la console de gestion SQL-Server en mode Conception), puis réessayez d'insert datatables. Gardez à l'esprit que vous ne pourrez probablement pas activer les contraintes après votre insertion, car vous violez les conditions après l'insertion. Désactivez ou réparez uniquement les contraintes, si vous êtes absolument certain qu'elles ne sont pas nécessaires.

Voici un exemple de syntaxe (vous devez connaître les noms de contraintes):

 --disable ALTER TABLE customer NOCHECK CONSTRAINT your_constraint_name --enable ALTER TABLE customer CHECK CONSTRAINT your_constraint_name 

Attention: Si j'étais vous, j'essaierais plutôt d'insert des valeurs factices pour les colonnes non nulles comme ceci:

 insert into customers select afield , 1 as dummyvalue, 2 as dummyvalue from your datasource 

Un moyen très simple de le faire serait de créer une table de ce type de structure:

CustomerID de type dans qui est une key primaire et le définir comme identité CustomerIDPrfix de type varchar (3) qui stocke GL- comme valeur par défaut. Ensuite, ajoutez vos autres champs et réglez-les sur NOT NULL.

Si cette méthode n'est pas acceptable et que vous devez écrire un triggersur, consultez ces deux articles: http://msdn.microsoft.com/en-us/library/aa258254(SQL.80).aspx

http://www.kodyaz.com/articles/sql-sortinggger-example-in-sql-server-2008.aspx

Basiclly il s'agit juste d'get la bonne logique pour vérifier si les champs sont vides. Expérimentez avec une database de test sur votre machine locale. Cela vous aidera à bien faire les choses.