sql-server - 如何通过插入子目录处理 T-SQL 文件表中的名称配置?
问题描述
我遇到了将文件存储在文件表中的问题,因为它们具有相同的文件名,因此违反了唯一约束。我决定尝试解决这个问题,通过将新触发器添加到数据库 ON INSERT 中,这将创建新的随机命名的子目录,然后将其设置为父路径。
我找到了一些示例,说明如何通过在写入后更新行来有效地移动文件来完成此操作。是否可以在插入期间执行此操作?我不想冒险两个文件在移动到自己的目录之前尝试使用相同的目录(因为在同名的文件上,这会导致崩溃)。
基本上和一个 BEFORE INSERT 触发器会:
- 插入语句
扳机
创建子目录
cset new parent_path
结尾
- 完成插入
我知道它不能通过简单地添加 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
解决方案
推荐阅读
- angular - Angular 8 路由器重新加载整个页面而不是部分加载。为什么?
- xml - 如何使用 XSLT 打印节点属性内的参数值?
- swift - 从字符串iOS swift 5转换日期
- pandas - 宜必思熊猫数据框连接
- java - Spring Integration 中的并行处理
- javascript - 使用 JSON 文件数据填充选择下拉列表
- bash - Kubernetes Helm bash 命令:bash: {"message":: command not found
- ruby-on-rails - 在 VS Code 中调试 Cucumber Ruby。错误:没有这样的文件或目录 - exec
- spring - 负载上基于 Spring Cloud Stream 内容的路由
- sql - 如何使用宏在 SAS 中获取当前月份名称和年份