首页 > 解决方案 > 如何通过插入子目录处理 T-SQL 文件表中的名称配置?

问题描述

我遇到了将文件存储在文件表中的问题,因为它们具有相同的文件名,因此违反了唯一约束。我决定尝试解决这个问题,通过将新触发器添加到数据库 ON INSERT 中,这将创建新的随机命名的子目录,然后将其设置为父路径。

我找到了一些示例,说明如何通过在写入后更新行来有效地移动文件来完成此操作。是否可以在插入期间执行此操作?我不想冒险两个文件在移动到自己的目录之前尝试使用相同的目录(因为在同名的文件上,这会导致崩溃)。

基本上和一个 BEFORE INSERT 触发器会:

  1. 插入语句

扳机

  1. 创建子目录

  2. cset new parent_path

结尾

  1. 完成插入

我知道它不能通过简单地添加 parent_path_locator 来完成,因为它是计算值。此代码不起作用。这是我的第一次尝试(我现在知道由于计算属性而无法工作)并描述了我想做的事情。

DECLARE @val table (id hierarchyid);
DECLARE @val2 hierarchyid;

INSERT INTO [fulladb].[mock___filetable]
        ([name]
        ,[is_directory]
        ,[is_archive]
)
    OUTPUT inserted.path_locator INTO @val
    VALUES
        ('ducken', 1, 0);

SELECT @val2 = id from @val;

INSERT INTO [fulladb].[mock___filetable]
        ([name]
        , [parent_path_locator]
        ,[is_directory]
        ,[is_archive]
)
    VALUES
        ('ducken_inner', @val2,1, 0)
GO

标签: sql-servertsqlsql-server-2017

解决方案


推荐阅读