當我試圖創建該表,有一個錯誤,指出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