我正在一个T-SQL脚本中使用SCHEMA_NAME()
函数。
对于我的同事来说,它返回默认模式,但对我来说返回NULL
。
SCHEMA_NAME()
的文档仅在向该函数提供参数时列出了NULL
作为可能的值。
以下是关于SCHEMA_NAME()
的文档:
https://learn.microsoft.com/en-us/sql/t-sql/functions/schema-name-transact-sql
调试此问题时应注意哪些内容?
DBA已经检查了我的权限和同事的权限是否相同。
我没有传递任何参数调用该函数,因此文档中提到的当schema_id
无效时返回NULL
的情况并不适用,至少没有明确地适用。
DBA确认我有一个默认模式,并且我使用了以下选择来确认:
select * from sys.database_principles dp where dp.name = USER_NAME();
DBA将我的默认架构更改为其他内容,然后在后台设置了某些内容后又将其更改回来。这种情况发生在SQL Studio中以及使用sqlcmd从命令行运行时。
我注意到当我运行CREATE PROCEDURE myproc时,该过程创建在我的默认模式中,但当我运行execute myproc时,我需要执行execute myschema.myproc。也就是说:我必须指定模式。
我已经验证了默认模式的存在,通过在调用存储过程时硬编码模式名称。
SCHEMA_NAME()
将返回NULL
。 - Dan Guzman