Insérer des données dans une vue (SQL Server)
J'ai la configuration suivante:
CREATE TABLE dbo.Licenses
(
Id int IDENTITY(1,1) PRIMARY KEY,
Name varchar(100),
RUser nvarchar(128) DEFAULT USER_NAME()
)
GO
CREATE VIEW dbo.rLicenses
AS
SELECT Name
FROM dbo.Licenses
WHERE RUser = USER_NAME()
GO
Lorsque j'essaie d'insérer des données à l'aide de la vue...
INSERT INTO dbo.rLicenses VALUES ('test')
une erreur survient:
Cannot insert the value NULL into column Id, table master.dbo.Licenses; column does not allow nulls. INSERT fails.
Pourquoi ne pas l'incrément automatique de la colonne d'identité de travail lorsque vous tentez d'insérer à l'aide de la vue et comment puis-je résoudre ce problème?
Scénario:
Les différents utilisateurs de la base de données ne devrait être en mesure de travailler avec leurs propres lignes de cette table. Donc je suis en train d'utilisation de la vue comme une sorte de sécurité en vérifiant le nom d'utilisateur. Est-il une meilleure solution?
source d'informationauteur Keeks
Vous devez vous connecter pour publier un commentaire.
Qu'à nommer votre colonne?
Ça fait des années depuis que j'ai essayé la mise à jour via un affichage afin YMMV comme HLGEM mentionné.
Je dirais qu'une "Au LIEU DE" déclencheur sur le point de vue de permettre à un simple
INSERT dbo.Licenses
(c'est à dire la table) dans le déclenchementAller à la conception de cette table. Maintenant, sur la droite, définissez la colonne ID de la colonne en question. Il va maintenant auto remplir sans spécification.
Semble que vous sont en cours d'exécution à l'encontre de cette règle pour la mise à jour des vues à partir de la documentation en Ligne:
"Les états d'INSERTION devez spécifier des valeurs pour toutes les colonnes dans la table sous-jacente qui ne permettent pas de valeurs nulles et n'ont pas de valeur par DÉFAUT."
Vous avez créé un tableau avec
ID
commePRIMARY KEY
qui satisfaitUNIQUE
etNOT NULL
contraintes, de sorte que vous ne pouvez pas faire laID
commeNULL
par l'insertion, nom de domaine, de sorte queID
doit également être inséré.Le message d'erreur indique ce.
Quel est votre Niveau de Compatibilité ensemble? Si c'est à 90, ça fonctionne comme prévu. Voir cet article.
Dans tous les cas, pourquoi ne pas les insérer directement dans la table?
L'insertion de 'test' pour nom mènera à l'insertion
NULL
valeurs des autres colonnes de la table de base qui ne sera pas correct que l'Id est unPRIMARY KEY
et il ne peut pas avoirNULL
valeur.Vous avez juste besoin de spécifier les colonnes qui vous êtes insérant directement dans:
Points de vue peuvent être pointilleux comme ça.