我在c#中创建了以下方法暂时禁用触发器
public static void DisableTriggers<TEntity>(this Table<TEntity> table) where TEntity : class
{
ArgumentValidation.CheckForNullReference(table, "table");
string sql = string.Format("IF object_id('tempdb..#DISABLETRIGGER_ReviewEDoc') IS NULL BEGIN create table tempdb..#DISABLETRIGGER_ReviewEDoc (col int) END", table.GetTriggerDisabledTempTableName());
table.Context.ExecuteCommandLogErrors(sql);
}
在SQL更新触发器中检查相同的临时表,如下所示
IF OBJECT_ID('tempdb..#DISABLETRIGGER_ReviewEDoc') IS NULL
BEGIN
-- SKIP logic written here
END
问题是它似乎不起作用,检查总是返回null。
提前感谢您的想法/建议
答案 0 :(得分:0)
那是因为临时对象的“真实”名称与您在脚本中使用的名称不同。
修改强> 如果您运行此脚本:
SELECT COUNT(*) FROM tempdb.sys.objects
SELECT TOP 1 * FROM tempdb.sys.objects ORDER BY create_date DESC
CREATE TABLE #MyTempTable ( ID int )
SELECT TOP 1 * FROM tempdb.sys.objects ORDER BY create_date DESC
SELECT COUNT(*) FROM tempdb.sys.objects
DROP TABLE #MyTempTable
SELECT COUNT(*) FROM tempdb.sys.objects
SELECT TOP 1 * FROM tempdb.sys.objects ORDER BY create_date DESC
您将看到Temp DB中的对象。 name
列是数据库对象(即表)的真实姓名。
名称#MyTempTable
由sql server execution engine转换为更正名称。在我的例子中,有一个名为#MyTempTable________________________________________________________________________________________________________00000000027C
的对象。