2012-07-28 5 views
-1

J'ai une table pour Contacts que je suis le stockage pour les clients avec des colonnes:Insérer date de modification dans le tableau

  • AddressLine1
  • AddressLine2
  • CityID
  • EmpID (FK)
  • ModifiedDate (Computed, DateTime)

J'utilise ASP.NE T 4.0 et dans le formulaire j'ai utilisé l'assistant ASP.NET avec 3 étapes. J'ai quelques problèmes.

  1. Comment insérer EmpID dans une table où dbo.ContactsEmpID est un FK.
  2. Comment conserver ModifiedDate? Quel est le sqlparameter pour ajouter la valeur Time?
+1

Comment est ModifiedDate "calculé"? –

+0

Le concepteur de base de données l'a affecté comme calculé. – Girish

+0

Il n'est pas calculé à partir de n'importe quoi d'autre .. Je l'ai juste mentionné comme calculé. – Girish

Répondre

2

Vous avez deux choix pour garder un ModifiedDate à jour:

  1. définir une contrainte DEFAULT sur cette colonne pour obtenir la date/heure lorsque vous insérez fraîchement une rangée, et créer un AFTER UPDATE déclencheur pour mettre à jour le ModifiedDate après chaque opération de mise à jour sur cette ligne

  2. mis l'ModifiedDate dans votre application client avant chaque opération de sauvegarde de la base de données

Mise à jour: si vous voulez créer un déclencheur AFTER UPDATE, utilisez le code comme ceci:

CREATE TRIGGER trg_UpdateModifiedDate 
ON dbo.YourTableHere 
AFTER UPDATE 
AS 
    UPDATE dbo.YourTableHere 
    SET ModifiedDate = GETDATE() 
    WHERE AddressID IN (SELECT AddressID FROM Inserted) 

Ici, je suppose que votre table YourTableHere a une sorte de clé primaire - un colonne comme un ID qui identifie de façon unique et claire chaque ligne unique. En fonction de cette ligne, vous pouvez mettre à jour le ModifiedDate de toutes les lignes qui ont été mises à jour par une instruction SQL donnée. Inserted est une table pseudo qui est disponible à l'intérieur d'un corps de code de déclenchement, qui contient toutes les lignes qui ont été modifiées par l'opération qui a provoqué ce déclencheur au feu (toutes les lignes touchées par votre déclaration UPDATE sur YourTableHere)

En savoir plus sur les déclencheurs ici:

Mise à jour # 2: si votre colonne ModifiedDate est en effet calculé sur le niveau de la table SQL Server, vous ne pouvez pas mise à jour directement. Vous aurez besoin de savoir de quoi il a été calculé, puis vous devez modifier cette colonne (si vous le pouvez).

Pour savoir ce qu'il est calculé à partir, exécutez cette requête sur la base de données SQL Server:

SELECT 
    c.name, c.is_computed, c.definition 
FROM 
    sys.computed_columns c 
WHERE 
    object_id = OBJECT_ID('dbo.Contacts') 
    AND c.Name = 'ModifiedDate' 
+0

Comment utiliser déclencheur AFTER UPDATE dans mon application pour ModifiedDate? Des liens pour me montrer comment le faire? Merci, – Girish

+0

Merci beaucoup .. Un doute un «inséré» mot-clé ici. J'ai un PK appelé AddressID (PK-AutoIncrement) .. Donc 'Inséré' est la table où j'ai inséré? – Girish

+1

@Girish: 'Inserted' est une ** pseudo-table ** qui n'existe que pendant la durée de vie du trigger. Si votre instruction 'UPDATE' a touché 10 adresses, alors' Inserted' contiendra les nouvelles valeurs pour les 10 lignes qui ont été mises à jour. Il aura les mêmes colonnes que votre table auquel le déclencheur est connecté, par ex. dans votre cas, si votre table a 'AddressID', il y aura une colonne' Inserted' qui contient le nouveau inséré de l'auto-incrément ID –

-1

vous pouvez utiliser simple déclaration de mise à jour lorsque vous modifiez la date comme ..

update tabelname set modifieddate='@Prameterdate' where empid='01' 
+1

Il y a quelque chose de louche dans ces chaînes littérales ... –