问题标签 [context-info]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql-server - SQL Server 中 CONTEXT_INFO 的范围是什么?
为了审计/历史表的目的,我正在使用 CONTEXT_INFO 将用户名传递给删除触发器。我正在尝试了解 CONTEXT_INFO 的范围以及是否正在创建潜在的竞争条件。
我的每个数据库表都有一个存储过程来处理删除。删除存储过程以 userId 作为参数,并将 CONTEXT_INFO 设置为 userId。然后我的删除触发器获取 CONTEXT_INFO 并使用它来更新审计表,该表指示谁删除了行。
问题是,如果同时执行来自不同用户的两个删除存储过程,那么其中一个存储过程中设置的 CONTEXT_INFO 是否可以被另一个存储过程触发的触发器使用?
我看过这篇文章http://msdn.microsoft.com/en-us/library/ms189252.aspx但我不清楚 SQL Server 中会话和批处理的范围,这是这篇文章有用的关键!
我会发布代码,但目前时间很短。如果这还不够清楚,我稍后会编辑。
提前感谢您的帮助。
sql-server - 为什么 context_info 会失败?
我正在使用 context_info 来模拟一个全局变量,我在这个上下文中使用它。
我有由几个批次组成的脚本,我在开头(123
在示例中)设置了一个全局变量,然后在所有批次之后我使用该数字来填充日志表。
现在这可行,但今天它在一台机器上失败了,我不知道为什么。context_info 不起作用有什么原因吗?我尝试手动替换context_info
,123
脚本成功了。该脚本是从 Delphi 应用程序运行的。
sql-server - 将 CONTEXT_INFO 转换为 varchar 和结果长度
我正在尝试使用CONTEXT_INFO
将用户代码从存储过程传递到 DELETE 触发器以进行表审计。
一切正常,但是我注意到保存在审计表中的用户代码的长度不正确。
以这个脚本为例...
结果:
len(@userCode) = 8
长度(@temp_userCode)= 50
为什么@temp_userCode
变量以 50 的长度返回,我怎样才能将它修剪回原来的长度以正确存储它?
更多的信息:
运行 SQL Server 2005,但该解决方案需要在 2005 及以后的所有版本中工作。
sql-server-2008 - Context_Info SQL Azure 的替换
我目前正在使用 Master 数据库的 CONTEXT_INFO 属性来存储登录的用户名,以便稍后在表触发器中使用它进行审计。
在迁移到 SQL Azure 时,跨数据库连接的问题突然出现,我找不到该问题的直接解决方案。
以下是问题详情:
- 我从数据访问层调用存储过程 XXX 并将用户名作为参数传递
- 用户名用于设置 XXX 中的 CONTEXT_INFO 值
- 然后在表插入/更新/删除触发器中使用 CONTEXT_INFO 值来存储用户名以进行应用程序审计
到目前为止我找到的解决方案:
- 在数据库中创建表以用作 CONTEXT_INFO
- 在数据访问层中使用 2 个连接字符串,一个用于主数据库(设置 CONTEXT_INFO),另一个用于应用程序并在每次打开与我的应用程序的连接之前执行 SET CONTEXT_INFO
但我发现这两种解决方案都有风险,特别是将来在多个 SQL Azure 数据库上扩展数据库时。
感谢您的支持。
sql-server-2008 - 在 sql server 触发器中捕获 Web 会话信息
我创建了一个触发器来审核我的 Web 应用程序中对表行的更改。我的 Web 应用程序使用单个 db 用户对数据库进行更新。但是,许多不同的用户可以登录网站并进行更新和插入。因此,db 用户将始终相同,但 web 用户将不同
我想用某种方法将登录用户捕获到对行进行更改的网站,以便我可以与进行更改的 Web 用户一起审核更改。
有人可以指导我如何在我的 sql 触发器中捕获 Web 会话,以便我知道谁在进行更改。我可以配置 web.config 文件,以便会话信息也传递给 sql server 触发器,或者如果有其他方式,请告诉我
问候
阿里夫
tsql - How to store and extract number from binary field?
I have a procedure that is doing INSERT/DELETE operations over table and a trigger which is logging the changes in second table.
What I need is to pass the security user id that instantiated the procedure call to the trigger in order to record who user has made the changes.
It seems that the only way to do this is to use SET CONTEXT_INFO and CONTEXT_INFO().
The issue is, I am not able to extract the number(the user id). For example, the code below:
returns 0.
sql-server - 使用 CONTEX_INFO SQL 服务器
我正确设置了 context_info,因为 PRINT @username 返回正确的值,但我在第二次打印时得到一个空行。如果我在上面的 where 子句中输入一个值而不是 @username,它也会打印正确的值。我错过了什么?
我删除了 CONTEXT_INFO,现在我的输出是正确的。所以它必须与CONTEXT_INFO有关。
sql-server - 如何在 SQL Server Profiler 中跟踪 CONTEXT_INFO?
我正在使用 SQL Server 2008 R2。如果我为当前会话设置了一些上下文信息,我如何在 SQL Server Profiler 中跟踪它?SQL Server Profiler 中的哪一列会显示上下文信息的值?
例如,假设在存储过程中,我以这种方式将上下文信息设置为“dev_support”:
如何在 SQL Server 配置文件中查看值“dev_support”?
谢谢
sql-server - SQL Server、CONTEXT_INFO() 和 varchar 大小
在表中users
,我有一列username
datatype varchar(50)
。该表没有记录。我为用户名插入一条新记录A
。以下返回我所期望的:
到目前为止,一切都很好。
现在我从另一个表上的触发器更新表用户,使用值来自CONTEXT_INFO()
:
在some_other_table
我做的触发器中:
用户名正确设置为“B”,但现在返回 50:
填充上下文时,解决方案是:
但为什么我需要这样做?
当我不填充CONTEXT_INFO
空格时,使用其值进行更新会导致结果长度为 50(即使我ltrim
和rtrim
更新前的单个字符值)会发生什么情况?
为什么我必须将我CONTEXT_INFO
的总字节数填充到 127 个字节,而不是 128 个字节?对于超过 127 的每个字符,从最初设置的值中截断 1 个字符CONTEXT_INFO
注意:ANSI_PADDING 已启用