使用临时表上的函数检查约束

Posted

技术标签:

【中文标题】使用临时表上的函数检查约束【英文标题】:Check Constraint with function on temporary table 【发布时间】:2015-03-03 17:54:28 【问题描述】:

我正在尝试使用临时表上的函数设置检查约束并得到以下错误:

消息 4121,第 16 级,状态 1,第 10 行 找不到列“dbo”或用户定义的函数或聚合“dbo.CheckCustomers”,或者名称不明确。

...但select dbo.CheckCustomers() 有效。

一般可以在临时表上设置这样的约束吗?

【问题讨论】:

【参考方案1】:

请记住,临时表实际上是在系统数据库 tempDB 中创建的,而不是在您的实际数据库中。因此,为了让您能够在临时表中使用函数作为检查约束,该函数必须存在于 tempDB 中。

然而,重要的一点是,每次重新启动服务器时都会重新创建 tempDB。因此,如果您确实想采用这种方法,则需要围绕它进行设计。 (对此的参考是Inside Microsoft SQL Server 2008 T-SQL Programming)

【讨论】:

...或使用三部分命名? @gvee 很遗憾,你不能。 SQL Server 会喊A user-defined function name cannot be prefixed with a database name in this context.

以上是关于使用临时表上的函数检查约束的主要内容,如果未能解决你的问题,请参考以下文章

SQL 临时表上的后缀

临时表上的 distkey 和 sortkey - Redshift

临时表上的索引在表被删除的时候会被删除吗?

如何使用存储过程将数据存储在临时表上?

使用用户定义函数作为临时表中的约束

MSSQL系列 :表相关操作列操作(唯主键默认检查外键非空)约束临时表