我在T-SQL脚本中使用 newvar=$(echo "$var" | sed -r 's/-([0-9])/:\1/')
函数。
它为我返回SCHEMA_NAME()
,但是我的同事的默认架构。
NULL
的文档仅在SCHEMA_NAME()
函数提供参数时将NULL
列为可能的值。
以下是SCHEMA_NAME()
的文档:
https://docs.microsoft.com/en-us/sql/t-sql/functions/schema-name-transact-sql
调试此问题时我应该注意什么?
DBA检查了我的同事和我自己的权限是否相同。
我在没有任何参数的情况下调用该函数,因此文档在SCHEMA_NAME()
无效时返回NULL
的情况不适用 - 至少没有明确说明。
DBA确认我有一个默认架构,我使用以下选项确认我有一个默认架构:
schema_id
DBA将我的默认架构更改为其他架构,然后在后台设置了某些内容时将其更改回来。
这在SQL Studio中发生,当我使用select * from sys.database_principles dp where dp.name = USER_NAME();
在命令行上运行时。
我注意到当我运行sqlcmd
时,程序是在我的默认架构中创建的,但是当我运行CREATE PROCEDURE myproc
时,我需要执行execute myproc
。那就是:我必须指定架构。
我已经通过在对存储过程的调用中对模式名称进行硬编码来验证存在默认模式。
答案 0 :(得分:1)
当您在与schema_id不同的数据库上执行查询时,也会发生这种情况
例如
select sn = schema_name(schema_id) from [yourdbname].sys.all_objects
并且当前数据库不是[yourdbname]
答案 1 :(得分:0)
在安全>登录中,右键单击您的登录,单击“用户映射”,查看您所在数据库的默认架构。然后为您的同事登录执行相同操作。