无法在表约束中使用DEFAULT SESSION_USER(改为切换到user_name)

时间:2016-11-24 09:25:27

标签: sql-server sql-server-2014

我已经定义了一个默认值为SESSION_USER的约束,例如如下:

CREATE TABLE [test] (col1 varchar(50))
GO
ALTER TABLE [test]  ADD  CONSTRAINT [x]  DEFAULT SESSION_USER FOR [col1]
GO

这似乎运行良好 - Command(s) completed successfully.

但是 - 实际定义已被修改为使用user_name()函数,例如如下:

ALTER TABLE [dbo].[test] ADD  CONSTRAINT [x]  DEFAULT (user_name()) FOR [col1]

这是为什么?

1 个答案:

答案 0 :(得分:1)

因为SESSION_USERUSER_NAME()的同义词:

  

连接到SQL Server实例时,请使用以下命令   获取用户名或用户ID:

     

...

     
      
  • ISO CURRENT_USERSESSION_USER函数用于获取与当前连接关联的数据库用户名。在   Transact-SQL,这些函数实现为同义词   USER_NAME()。 (USER_NAME指定没有database_user_ID   参数。)Transact-SQL函数USER也实现为   USER_NAME()的同义词。
  •   

(来源:MSDN)。

在编译时约束被简化为正常形式,而不是像存储过程那样存储。您会注意到还添加了额外的括号。虽然不保留文字定义,但语义是。