我已经定义了一个默认值为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]
这是为什么?
答案 0 :(得分:1)
因为SESSION_USER
是USER_NAME()
的同义词:
连接到SQL Server实例时,请使用以下命令 获取用户名或用户ID:
...
- ISO
CURRENT_USER
或SESSION_USER
函数用于获取与当前连接关联的数据库用户名。在 Transact-SQL,这些函数实现为同义词USER_NAME()
。 (USER_NAME
指定没有database_user_ID
参数。)Transact-SQL函数USER
也实现为USER_NAME()
的同义词。
(来源:MSDN)。
在编译时约束被简化为正常形式,而不是像存储过程那样存储。您会注意到还添加了额外的括号。虽然不保留文字定义,但语义是。