在 SQL Server 中创建和修改的序列号

2024-01-28

我需要向应用程序中的大多数实体添加序列号,因为我将并行运行 Lucene 搜索索引。

我不需要运行持续的轮询过程,或者通过我的应用程序手动运行我的索引器,我正在考虑以下内容:

  • Add a Created默认值为GETUTCDATE().
  • Add a Modified默认值为GETUTCDATE().
  • Add an ON UPDATE触发更新的表Modified to GETUTCDATE()(这会发生吗as执行更新了吗?即它添加了SET [Modified] = GETUTCDATE()到 SQL 查询而不是事后单独更新?)
  • The ON UPDATE触发器将调用我的 Lucene 索引器来更新其索引(这必须是xp_cmdshell可能会调用,但是有没有一种方法可以向进程发送消息而不是启动新消息?我听说我可以使用命名管道,但是如何在存储过程或触发器中使用命名管道呢? (当然,搜索“SQL Server 命名管道”会得到不相关的结果)。

这听起来不错吗?我该如何解决小问题?


据我了解,您必须向现有表引入两列,并在“运行时”中处理它们(至少其中一列)并由外部组件使用。

你的前三点并不奇怪。根据触发器处理的时间,SQL Server中有两种类型的触发器:INSTEAD OF触发器(实际上在插入发生之前处理)和AFTER触发器。但是,在 INSTEAD OF 触发器内,您必须提供要执行哪些操作的逻辑really将数据以及您需要的其他自定义处理一起插入表中。如果不是真的有必要,我通常会避免这样做。

现在关于你的第四点 - 这很棘手,并且在 SQL Server 中有几种方法可以解决这个问题,但所有这些方法都至少有点难看。基本上,您必须执行外部进程或向其发送消息。我确实没有任何使用 Lucene 索引器的经验,但我想其中一种方法(执行或发送消息)将适用。

因此,您可以执行以下操作之一来直接或间接访问外部组件,即直接或通过某些代理模块访问 Lucene 索引器:

  1. 实施不安全的 CLR 触发器;基本上,您在触发器内执行 .NET 代码,从而访问整个(请小心 - 不完全正确).NET 框架
  2. 实施不安全的 CLR 过程;与 CLR 触发器的唯一区别是,您不会在 INSERT 之后立即调用它,但您可以很好地处理一些定期运行的数据库作业
  3. 使用xp_cmdshell;您已经了解了这一点,但是您可以将此方法与最后一点中的工作包装技术结合起来
  4. 调用网络服务;这种技术通常被标记为实验性的,并且您必须自己实现该服务(如果 Lucene 索引器没有自行安装某些 Web 服务)
  5. 当然还有其他我现在想不到的方法......

由于简单,我个人会选择第三点(job+xp_cmdshell),但这只是因为我对 Lucene 索引器如何工作缺乏任何了解。

编辑(另一个选项):

使用查询通知; SQL Server Service Broker 允许外部应用程序连接并监视感兴趣的更改。您甚至可以选择如何执行此操作(基本上是同步或异步),唯一的前提条件是您的 Service Borker 已启动、正在运行并且可供您的应用程序使用。这是一种更复杂的方法,用于通知外部组件某些内容已发生变化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 SQL Server 中创建和修改的序列号 的相关文章

  • 将查询结果即时导出到文件

    我需要将查询结果导出到 csv 文件并将该文件放在网络共享文件夹中 是否可以在存储过程中实现此目的 如果是 则会出现另一个限制 我可以在没有系统管理员权限的情况下实现此目的 也就是不使用 xp cmdshell BCP 实用程序吗 如果 2
  • Crystal Reports 假定存储过程中列的数据类型错误

    Crystal Reports Engine 有时认为从某些存储过程返回的字段实际上是类型的原因是什么money is a varchar 255 因此 我无法应用任何数字格式 你确定你有铸成金钱的领域吗 您最近是否更改了数据类型 并且之后
  • 如何在SQL Server中创建SYS模式的表?

    可以在 SQL Server 2008 sys 架构中创建表吗 我知道可以将表标记为系统 但不能更改架构 有什么窍门吗 您无法将自己的对象添加到 sys 架构中 无法在 sys 架构中创建用户定义的对象 盖尔 埃里克森 MS SQL Ser
  • 捕获 SQL Server 时态表删除上的 SysEndTime

    是否可以使用 OUTPUT 关键字捕获 SysEndTime 时间时间戳 例如 DECLARE MyTableVar TABLE sysendtime datetime2 DELETE FROM dbo someTable OUTPUT D
  • T-SQL中有异或运算符吗?

    这是我的声明 IF UserName IS NULL AND EditorKey IS NULL OR UserName IS NOT NULL AND EditorKey IS NOT NULL BEGIN RAISERROR One o
  • 存储过程 - 使用 NOT IN where 子句执行查询

    我有一个存储过程 Create PROCEDURE abc sRemovePreviouslySelectedWhereClause nvarchar max AS BEGIN SELECT FROM table WHERE nId NOT
  • 在 T-SQL 中解析 JSON 数组

    在我们的 SQL Server 表中 我们有一个存储有字符串数组的 json 对象 我想以编程方式将该字符串拆分为几列 但是 我似乎无法让它发挥作用 或者即使有可能 是否可以在WITH子句中创建多个列 或者在select语句中创建多个列是更
  • 如何处理用户界面中的数据库约束违规?

    我们使用存储过程在数据库中实现大部分业务规则 我永远无法决定如何最好地将数据约束违规错误从数据库传递回用户界面 我所说的约束更多地与业务规则相关 而不是与数据完整性相关 例如 诸如 无法插入重复的键行 之类的数据库错误与业务规则 不能有多个
  • SQL Server 2008 R2 的 Try_Convert

    我正在使用 SQL Server 2008 R2 并且有一个VARCHAR我想要转换为的列DECIMAL 28 10 using CONVERT 但其中许多行的格式错误 因此无法将它们解析为数字 在这种情况下 我只想通过将结果设置为 0 或
  • 查询所有表数据并进行索引压缩

    是否有人碰巧拥有一个通用 SQL 语句 可以列出数据库中每个分区的所有表和索引及其当前的压缩设置 Thanks 编辑 这是我尝试查询表所得到的 但我不确定连接是否正确 我得到了重复项 这似乎是由于索引的存在引起的 SELECT t name
  • SQL SERVER 中的排序依据和大小写

    我需要在存储过程中按功能排序 一个值被发布到网络服务 并且基于该值我必须以某种方式对结果进行排序 即 当 ColName 按 ColName 发布订单时 当 ColName2 由 ColName2 发布订单时 我正在研究使用 Case 但出
  • Sql Server:如何在 WHERE 子句中使用 MAX 等聚合函数

    我想获得该记录的最大值 请帮我 SELECT rest field1 FROM mastertable AS m INNER JOIN SELECT t1 field1 field1 t2 field2 FROM table1 AS T1
  • 如何从经典 ASP 读取 SQL Always-加密列

    我维护一个经典的 ASP 应用程序 是的 我知道 我们正在开发它 并且需要访问 SQL 2017 中的 Always Encrypted 列 我已经导入了证书并在 SSMS 和 PowerShell 中进行了测试 这很有效 我在 ASP 中
  • 使用 Switch 的报告服务表达式

    我无法让这个表达式与报告服务一起使用 我必须使用 IF 和 ELSE IF 语句 感谢您的任何建议 Switch IsNothing Fields field date Value Fields set flag Value 1 Decli
  • 如何授予所有表的 REFERENCES 权限

    我必须授予REFERENCES登录权限说sql login 我可以给予资助REFERENCES对单个表的权限 例如 GRANT REFERENCES ON Mytable TO sql login 有什么办法可以授予REFERENCES允许
  • 正则表达式 '?' 的类似物(前一项可选)在T-SQL中像什么?

    我想知道 是否可以翻译包含 的正则表达式 前面的项目可选 在 T SQL LIKE 模式中 DB 端无需任何操作 例如 31 4 我可以将其分成几个子句 但如果正则表达式包含很多 这不太方便 LIKE不使用正则表达式 并且它使用的模式语言没
  • 在 Sql Server 中转换为日期时间 MM/dd/yyyy HH:mm:ss

    如何将给定的日期格式转换为MM dd yyyy HH mm ss 我尝试了下面这个但没有实现 谁能帮我 SELECT CONVERT VARCHAR 20 GETDATE 120 SQL Server 2005及以上版本支持 SELECT
  • 在 SQL 数据库中存储“列表”的最正确方法是什么?

    因此 我读了很多关于如何将多个值存储到一个列中是一个坏主意 并且违反了数据标准化的第一条规则 令人惊讶的是 这不是 不要谈论数据标准化 所以我需要一些帮助 目前我正在为我工 作的地方设计一个 ASP NET 网页 我想根据此人所属的 Act
  • 对多个数据库执行 SQL 查询

    我知道我的帖子与该论坛中的其他帖子的标题非常相似 但我真的找不到我需要的答案 这是我的问题 我的 Windows Server 上运行着 SQL Server 在我的 SQL Server 中 我有大约 30 个数据库 它们都具有相同的表和
  • 探查器模板可以迁移到较新版本的 SQL Profiler 吗?

    是否可以将 Profiler 模板迁移到较新版本的 SQL Server 就我而言 我想将 SQL 2008 模板带到 2012 年 我尝试过 1 直接文件复制和 2 导出 导入 在这两种情况下 旧模板都会运行 但无法修改 修改后会出现以下

随机推荐