当我试图创建该表,有一个错误,指出fns_GetSomeDate无法识别:TSQL默认列值
create table #tmpTable(
id INT,
validity datetime NOT NULL default (dbo.fns_GetSomeDate())
)
和错误:“列‘DBO’不允许在此上下文和用户定义的函数或集合“dbo.fns_GetSomeDate”无法找到。“返回。
但是当我尝试创建相同的表,但不是作为一个临时表(不带“#”)一切正常OK:
create table tmpTable(
id INT,
validity datetime NOT NULL default (dbo.fns_GetSomeDate())
)
功能确实存在。有人知道如何解决这个问题吗?
当你创建一个临时表,它存储在'tempdb'。我想这是因为你的函数不存在于该数据库中? – Bridge
这很有趣。 'tempdb'中缺少该函数。您需要先在那里创建它。但是当tempdb对象由于重启或其他原因而被清除时,您将使用该函数。另外,我尝试在'default'约束中使用'database.schema.function_name',但它不被允许。 – gotqn
这就是我一开始就怀疑的问题,即问题与范围有关。我已经尝试过'some_db.dbo.fns_GetSomeDate',它也没有工作,错误:在这种情况下不允许使用名字“some_db”。有效表达式是常量,常量表达式和(在某些情况下)变量。列名不被允许。我已经尝试将函数的值存储在本地变量中,但“CREATE TABLE语句中不允许使用变量”。 – user3246112