![]() |
1
17
您可能会发现以下内容很有帮助: Disabling a Trigger for a Specific SQL Statement or Session 但你也可能面临另一个问题。 如果我正确理解您所处的情况,系统默认情况下会自动插入产品代码(通过生成值)。 现在,您需要插入由某个临时系统创建的产品,该产品的产品代码是由临时系统创建的,您需要手动将其插入到实时系统中。 如果您真的必须这样做,您需要确保您的实时应用程序在将来生成的代码不会与您手动插入的代码冲突-我假设它们必须是唯一的。
|
![]() |
2
11
可以使用以下命令禁用表上的触发器:
但这将适用于所有会话,而不仅仅是您当前的连接。。这显然是一件非常糟糕的事情:-) 最好的方法是改变触发器本身,以便它决定是否需要运行,无论是在表上使用“insert type”标志,还是在已经存储某种类型的类型时使用其他方法。 |
![]() |
3
5
在触发器中,更改代码,使触发器的错误位仅在“insertedFromImport”为空的行上运行。插入记录时,将“insertedFromImport”设置为非空值。 |
![]() |
4
3
禁用触发器、插入、提交。
|
![]() |
5
1
您能否检查SUSER_SNAME()并仅在管理前端上下文中运行? |
![]() |
6
1
接下来,在任何情况下都不要使用@identity来获取刚刚插入的值!改用作用域标识@@如果表上的触发器也向具有标识字段的其他表进行插入,则identity将返回错误的值。如果您正在通过系统使用@@identity(因为我们知道您的系统有触发器),您的首要任务必须是立即在代码中查找并更改@@identity的所有实例。如果不这样做,可能会出现严重的数据完整性问题。这是一个“在修复之前停止所有工作”的问题。
|
![]() |
7
0
如果使用批量插入进行插入,则可以仅为插入禁用触发器。 我很确定大容量插入需要文件系统上的数据文件才能导入,所以不能只使用t-SQL。
如果您使用的是windows身份验证,您的windows用户将需要对文件进行读取访问。如果使用混合模式身份验证,SQl Server服务帐户需要从文件中读取访问权限。 使用大容量导入时,默认情况下禁用触发器。 |
![]() |
Duvan · 将逗号(,)替换为点(.)[副本] 2 年前 |
![]() |
Mateen Bagheri · 选择表的计数并选择其自身 2 年前 |
![]() |
SoT · SQL Server中求和函数的工作方式 2 年前 |
![]() |
NKAT · 将列值聚合到列表中会产生错误 2 年前 |
![]() |
deanpillow · 返回两列中有一个匹配值的记录 2 年前 |
![]() |
snowflakes74 · 在Dapper中异步查询多个结果 2 年前 |