2017-06-06 2 views
0

J'essaye d'aller chercher la longueur d'une colonne particulière dans Au lieu de déclencher en utilisant la fonction LEN(). Je veux récupérer la longueur d'une colonne à partir d'une table insérée, puis comparer la longueur en utilisant sinon si je peux faire les actions requises. Voici ce que je fais:Comment faire pour récupérer la longueur de la colonne en utilisant un au lieu de déclencheur dans SQL Server?

CREATE TRIGGER [tr_firstNameLength_signupTable] 
ON [dbo].[signup_table] 
INSTEAD OF INSERT 
AS 
BEGIN 
    SET NOCOUNT ON 
    Declare @length varchar(50) 
    select @length = i.first_name from inserted i where i.first_name != null 
    if (LEN(@length) > 50) 
    Raiserror('Invalid Firstname. Please try again', 16, 1) 
    else 
    insert into signup_table(first_name, surname, mobile_number, email_address, salt, password) 
    select first_name, surname, mobile_number, email_address, salt, password from inserted 
END 

ou Devrais-je vérifier l'utilisateur? Je suis ouvert aux suggestions. Alors n'hésitez pas à suggérer comment je peux y arriver d'une meilleure façon. TIA ... :)

+3

Pourquoi la contrainte trigger * ou * vérifie-t-elle ici l'image? '(n) les colonnes varchar' sont déjà livrées avec une longueur maximale libre. –

+0

Ici, j'ai utilisé le trigger car je veux vérifier la longueur des données avant qu'elles ne soient insérées dans ma table et si la longueur est supérieure aux données taille puis affichez le message else insert dans la table. Mis à part Au lieu du déclencheur, y a-t-il un autre moyen de le faire? @Damien_The_Unbeliever – Deep

+0

Utilise la contrainte de vérification. –

Répondre

0
ALTER TABLE dbo.signup_table 
ADD CONSTRAINT 
CK_signup_table_first_name CHECK (len(first_name) <= 50) 
+0

J'ai essayé la même chose mais ça ne marche pas. – Deep