Lorsque vous utilisez une table militaire SQL, j'aimerais stocker des métadonnées supplémentaires pour le fichier tels que CreatedBy et LastModified. En regardant schéma de table de fichier SQL , ces informations ne sont pas disponibles par défaut.
Je me demande s'il est possible de déterminer ces informations par exemple en ajoutant un déclencheur à la table et à utiliser actuel_user pour déterminer l'utilisateur actuel et le stocker dans une table séparée?
J'explore la faisabilité de SQL Filetable pour un projet et n'a jamais utilisé cette technologie.
J'ai pu résoudre le problème en utilisant plutôt des déclencheurs.
Premièrement, une militation a un schéma fixe, donc de nouveaux champs ne sont pas autorisés. J'ai créé une table séparée pour stocker des informations de création dans une relation de 1 à 1 clavée par "Path_Locator".
Utiliser des déclencheurs, j'ai pu détecter des informations de création et le stocker.
Lors de la copie, de la suppression et de la renommation de fichiers, les informations de création (créées par modification par) peuvent être détectées à l'aide de SUSER_SNAME (). Toutefois, lors de la modification du document de Word, Excel, Notepad, il existe des scénarios où le SUSER_SNAME () retournera "DBO" au lieu des informations d'identification des informations d'identification Windows. Je ne suis pas sûr de savoir pourquoi cela se produit mais j'ai travaillé autour de cela en rejoignant Sys.dm_filetream_non_transacted_handles pour obtenir le nom d'utilisateur à partir de là. Voir le code ci-dessous:
CREATE OR ALTER TRIGGER Authoring_Update ON dbo.DBADocuments AFTER UPDATE AS
BEGIN
IF @@ROWCOUNT = 0 RETURN;
UPDATE dbo.FileMetadataTable SET ModifiedBy = ISNULL(s.login_name, suser_sname())
FROM dbo.FileMetadataTable f
JOIN Inserted i ON i.path_locator = f.PathLocator
LEFT JOIN sys.dm_filestream_non_transacted_handles s ON f.PathLocator = s.item_id
LEFT JOIN dbo.FileTable ft WITH (NOLOCK) ON s.item_id = ft.path_locator
END