我的数据库在我的 Windows Server 2016 标准上运行良好。数据库管理系统为 Microsoft SQL Server 2017 Express。
今天我添加了一个新的表格和内容,一切都很好。我尝试打开数据库图并收到错误消息:
如果图像不起作用,消息是:
无法作为数据库主体执行,因为权限“dbo”不存在,无法模拟此类主体,或者您没有权限。(Microsoft SQL Server,错误:15517)
我的服务器上没有任何变化 - 没有更新等。
我可以访问所有表。当我查看我登录的帐户时,我可以看到我是数据库所有者,其他帖子建议这样做 - 但我以前并不确定为什么这会有所帮助。
这个问题会影响我拥有的每个数据库。
唯一的区别是我现在使用以下脚本从计划任务创建每日备份
BACKUP DATABASE DBName TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL\Backup\DBName .bak'
WITH NOFORMAT, INIT, NAME = N'DBName Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
Run Code Online (Sandbox Code Playgroud)
的结果
SELECT ORIGINAL_LOGIN(), USER_NAME(), SUSER_SNAME();
Run Code Online (Sandbox Code Playgroud)
显示
我正在学习数据库。在我非常简单的数据库中,我有 2 个表。
WorkingHoursDetail
ID
NameOfWeek
Hours
Run Code Online (Sandbox Code Playgroud)
和
WorkingHours
ID
Name
Run Code Online (Sandbox Code Playgroud)
如您所见,它们目前没有关联。
现在,我面临着将它们联系起来的问题。我知道我通过添加一个外键来做到这一点,比如 MyOtherTableID 并将其链接到其他表 ID。
在上面的示例中,我可以向 EITHER 添加外键
WorkingHoursDetail
ID
NameOfWeek
Hours
WorkingHoursId
Run Code Online (Sandbox Code Playgroud)
和
WorkingHours
ID
Name
Run Code Online (Sandbox Code Playgroud)
或者
WorkingHoursDetail
ID
NameOfWeek
Hours
Run Code Online (Sandbox Code Playgroud)
和
WorkingHours
ID
Name
WorkingHoursDetailId
Run Code Online (Sandbox Code Playgroud)
我试过这个,它似乎有效,但是这个选项让我害怕。是否有一个“正确”的答案,或者这种变化只会影响数据写入数据库的顺序。如果是这种情况,那么这肯定会决定使用它的程序的流程(用户 GUI)。