我正在尝试创建一个SQL Server 2008 R2只能从一个 SQL 视图中进行选择的新数据库用户。但是,无论我在以这个新用户身份登录时尝试什么,我都可以从任何表中进行选择。我运行了这个查询:
select princ.name
, princ.type_desc
, perm.permission_name
, perm.state_desc
, perm.class_desc
, object_name(perm.major_id)
from sys.database_principals princ
left join
sys.database_permissions perm
on perm.grantee_principal_id = princ.principal_id
WHERE princ.name = 'public'
AND object_name(perm.major_id) = 'User_Table'
Run Code Online (Sandbox Code Playgroud)
并得到这些结果:
name type_desc permission_name state_desc class_desc (No column name)
public DATABASE_ROLE DELETE GRANT OBJECT_OR_COLUMN User_Table
public DATABASE_ROLE INSERT GRANT OBJECT_OR_COLUMN User_Table
public DATABASE_ROLE REFERENCES GRANT OBJECT_OR_COLUMN User_Table
public DATABASE_ROLE SELECT GRANT OBJECT_OR_COLUMN User_Table
public DATABASE_ROLE UPDATE GRANT OBJECT_OR_COLUMN User_Table
Run Code Online (Sandbox Code Playgroud)
这是否意味着无论登录到数据库的任何人都具有基于“公共”权限的完全访问权限?
sql-server-2008 security sql-server permissions sql-server-2008-r2
我正在 SQL Server 表上执行 ETL 逻辑。我要将数据从一张表同步到另一张表。对于需要基于源表添加到目标表的所有记录,我正在对目标表中的这些行进行插入。架构将其中一列定义为标识列。因此 SQL Server 会自动增加插入的新行的 id。因为我要移动现有的 id,所以我需要删除标识,插入这些行,然后重新应用标识,然后重置种子以使其与源表匹配。这如何以编程方式完成?
我从来不需要使用 SQL Server 2008 删除快照,但是现在当我尝试在 SQL Server 2012 中恢复时,出现错误:
System.Data.SqlClient.SqlError:无法对具有数据库快照或活动 DBCC 副本的数据库执行该操作。
为什么这在 2012 年是必要的,而不是在 2008 年?
在阅读了数据库快照之后,它们似乎作为小 DDL 和 DML 更改的备份和快速恢复方法很有用。此外,它们对于大规模开发/测试环境很有用。
我的预期用途是在我们的测试环境中,我们需要测试 DDL/DML 脚本并希望恢复到以前的状态而不需要很长的恢复时间。这里除了快照之外还有其他方法吗(不包括虚拟机解决方案)?这是否已被广泛采用,是否有任何需要注意的问题?我试图了解 MS 文档和我读过的少数博客之外的社区。如果您认为在线提供的文档具有代表性,那么这对我来说是一个很好的答案。
再次感谢各位大师!
我正在设计一个跟踪 IT 硬件的资产管理数据库。我决定使用超类型/子类型设计。我现在想跟踪设备更改的历史记录。我想使用单独的历史表,但我无法决定如何跟踪对子类型表所做更改的历史记录。
如果我为每个子类型表使用单独的历史表,我可以通过将它们与超类型历史表连接来重建记录,除非子类型历史表独立于超类型历史表而改变。独立地,我的意思是对超类型表中的数据进行了x 次更新,创建了x 次超类型历史记录,对子类型表进行了y 次更新,创建了y次子类型历史记录。如果在同一天进行更改,我将如何重建记录?
这是对超类型/子类型的良好使用,还是我应该对表进行非规范化?否则,有人可以建议任何方法来解决此类设计的历史问题吗?
使用 MS SQL Server 2008。
这是一个非常简化的 ERD:

我为多对多关系创建了一个连接表。
该表中只有 2 个列,ticketid并且groupid
典型的数据是
groupid ticketid
20 56
20 87
20 96
24 13
24 87
25 5
Run Code Online (Sandbox Code Playgroud)
我的问题是在创建复合键时我应该ticketid遵循groupid
CONSTRAINT [PK_ticketgroup] PRIMARY KEY CLUSTERED
(
[ticketid] ASC,
[groupid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
或者groupid反过来ticketid
CONSTRAINT [PK_ticketgroup] PRIMARY KEY CLUSTERED
(
[groupid] ASC,
[ticketid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = …Run Code Online (Sandbox Code Playgroud) 我们正在使用动态 SQL 运行以下查询,当我们运行并发实例时,它会在少数情况下出错。错误是:
由于数据移动,无法使用 NOLOCK 继续扫描...
这个问题说当一个进程读取另一个进程正在删除的数据时会抛出这个错误。我们的过程是删除和读取相同的行,但是按照以下查询一个接一个地读取(在SELECT之后DELETE):
DELETE FROM Table1
WHERE colum1 = somevalue1
AND column2 = somevalue2
SELECT COUNT(*)
FROM Table1 WITH (NOLOCK)
WHERE colum1 = somevalue1
AND column2 = somevalue2
Run Code Online (Sandbox Code Playgroud)
我试图了解上述查询的执行。由于SELECT未提交,它是否在提交之前开始执行DELETE?这是否意味着删除NOLOCK提示会停止错误?
我试图找出在某个时间段内在某个数据库上执行了哪些删除和更新语句。
我遇到了以下查询,但它生成了一条错误消息:
SELECT deqs.last_execution_time AS [Time], dest.TEXT AS [Query]
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
where dest.TEXT like '%Delete%from%'
ORDER BY deqs.last_execution_time DESC
Run Code Online (Sandbox Code Playgroud)
错误信息是:
消息 102,级别 15,状态 1,第 3 行“.”附近的语法不正确。
如果我尝试:
SELECT deqs.last_execution_time AS [Time], dest.TEXT AS [Query]
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS dest
where dest.TEXT like '%Delete%from%'
ORDER BY deqs.last_execution_time DESC
Run Code Online (Sandbox Code Playgroud)
我收到另一个错误:
Msg 321, Level 15, State 1, Line 3
"sql_handle" is not a recognized table hints option. If it is intended as …Run Code Online (Sandbox Code Playgroud) 今天,我正在阅读 Pinal Dave 的关于在...中添加列的博客。SQL SERVER让我惊讶的是,从 SSMS 向导添加列时,它来自以下过程:
为什么SQL SERVER要走这么耗时耗资源的过程?这么长的过程有什么好处吗....
我目前正在学习 SQL Server 2008 并且遇到了模式,我不明白他们必须有一个所有者的一件事;为什么他们不能拥有自己?
我的背景主要是 Java,听起来架构就像一个没有所有者的包。
sql-server-2008 ×10
sql-server ×7
audit ×1
etl ×1
identity ×1
index ×1
nolock ×1
permissions ×1
primary-key ×1
security ×1
snapshot ×1
ssms ×1
t-sql ×1