2013-05-29 1 views
0

Je suis un étudiant qui fait un projet dans SQL Server 2005. J'essaie d'écrire une procédure pour générer et insérer une clé primaire pour un ID. J'ai pensé à un déclencheur avant insertion mais j'ai des erreurs. Quelqu'un peut-il m'aider? C'est ce que j'ai trouvé jusqu'à présent:Avant de déclencher pour SQL Server 2005

CREATE TRIGGER Create_ResourceID 
ON Resource 
before INSERT 
AS 
    DECLARE @resourceid INT 
    SELECT @resourceid = (max(ResourceID) + 1) FROM Resource 
GO 

INSERT INTO Resource(ResourceID) VALUES (@resourceid); 
+0

Quelle erreur obtenez-vous? En passant, je pense que vous devez mettre en retrait la première ligne de votre code (en commençant 'CREATE TRIGGER' mais je ne peux pas éditer en retrait parce que StackOverflow me dit que je dois changer au moins 6 caractères, et que le retrait n'est que ! – nurdglaw

+1

SQL Server n'a pas de déclencheurs 'BEFORE' Il n'existe tout simplement pas Vous devez utiliser un déclencheur' INSTEAD OF INSERT' à la place –

+0

Pourquoi n'utiliseriez-vous pas un ['IDENTITY'] (http://msdn.microsoft.com/en-us/library/ms186775(v=sql.90).aspx) column: évite toutes les variations sur une condition de concurrence que vous semblez devoir rencontrer. et la valeur attribuée est disponible en utilisant ['SCOPE_IDENTITY()'] (http://msdn.microsoft.com/en-us/library/ms190315 (v = sql.90) .aspx) ou un ['OUTPUT'] (http://msdn.microsoft.com/en-us/library/ms177564(v=sql.90).aspx) clause. (_Do_ prendre le temps de se renseigner sur OUTPUT.) – HABO

Répondre

1

Vous devez utiliser un déclencheur pour cela?

chose la plus simple est d'obtenir SQL Server pour définir la clé primaire ID pour vous, quelque chose comme ceci:

CREATE TABLE Resource (
    ResourceID int identity, 
    . 
    . 
    . 
) 
+0

Donc, si je crée ma table et faire la ResourceID un int identifier, puis quand il y a une instruction d'insertion, si créera et entrera le ResourceID automatiquement? La raison que je demande est parce que je construis une application dans Visual Studio 2008 qu'un utilisateur entrera des données et les données seront insérées dans la table. La volonté et le type d'identité prennent-ils soin de cela? – JerseyGirl1201

+0

Oui, mais c'est 'IDENTITY'. Voir [http://msdn.microsoft.com/fr-FR/library/ms186775%28v=sql.90%29.aspx]. Si vous voulez simplement qu'un numéro identifie de manière unique chaque ligne de la table, 'IDENTITY' le fera pour vous. – nurdglaw

+0

Merci pour l'info, qui a parfaitement fonctionné. – JerseyGirl1201