我有两个表之间的关系。外键表可以在主表中有一行相关。有没有办法将 FK 列的值强制为 NULL 或主表中 PK 列的值之一?
我们有一个 SQL Server 2008 数据库,并且限制了所有表和视图远离特定用户 ID。多年来,我们根据用户需要一次授予一个表和视图。
我们必须这样做,因为供应商提供public了开箱即用的角色的读/写访问权限,因此我们必须为此用户创建一个角色,删除所有访问权限并仅授予他们需要的权限。
今天我们将创建一个仅包含这些表和视图的复制数据库,以便用户可以在不降低生产系统的情况下运行报告。问题是我不确定该用户可以访问哪些表和视图,因为多年来许多人一次授予访问权限。
是否有查询来检查此用户的访问权限?
PS 我是一名应用程序开发人员,所以请根据需要随意解释这一点。
编辑 - 最初如何创建角色和访问权限
------------------------------
-- CREATE ROLE db_finrep_deny
------------------------------
DECLARE @RoleName sysname
set @RoleName = N'db_finrep_deny'
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = @RoleName AND type = 'R')
Begin
DECLARE @RoleMemberName sysname
DECLARE Member_Cursor CURSOR FOR
select [name]
from sys.database_principals
where principal_id in (
select member_principal_id
from sys.database_role_members
where role_principal_id in (
select principal_id
FROM sys.database_principals where [name] = @RoleName AND type = 'R' )) …Run Code Online (Sandbox Code Playgroud) SQL Servers 有跟踪和 XEvents。这些用于捕获和分析 SQL Server 实例发生的情况。事件存储在堆栈中供以后分析。例如,如果我决定监视数据库中的任何死锁,我只是查询跟踪文件以查看一段时间内死锁的历史记录。这是我的问题:
当事件发生时,在我们的死锁事件示例中,有没有办法使用 msdb.dbo.xp_send_dbmail 获取电子邮件通知?
sql-server-2008 sql-server deadlock profiler extended-events
我们每晚都将来自一堆数据库的数据整合到四个报告数据库中。
因为每晚都会导入整个数据集,所以我们不需要能够将数据恢复到某个时间点。因此数据库处于简单恢复模式。
然而,每次我们运行导入时,我们的数据库ldf文件都会变得非常大(50+ Gig)。
有没有办法完全关闭日志记录或让 SQL Server 更快地清除这些日志文件?
我猜没有进行结算的log_reuse_wait_desc是ACTIVE_TRANSACTION。
我们正在使用SQL Server 2008j2ee Web 应用程序。我需要维护每个列的更新审计,其中有一个表非常重,大约有 100 列和 10K 条记录,并且每天都在快速增加。大约 200 名用户使用此应用程序,更新也非常频繁。我知道通过代码处理它需要非常频繁地连接到数据库。我想知道哪种方法更好。通过代码处理它会提供比使用它更好的性能SQL Server trigger。
我在 SQL Server 2012 中创建了一些需要在 SQL Server 2008 上运行的 SSIS 包。有人告诉我,在当前状态下这是不可能的。
有没有办法将 2012 包转换为 2008 版本?
如果没有,我的选择是什么?重来?
检查我系统上某些软件使用的相当关键的数据库,我发现其中一个表在列上有一个主键Id,其中Id使用checksum(newid()). 这让我感到不安;在newids的保证是独一无二的,但通过将校验和(一个32位整数,大概是出于性能的原因?),你有一些机会,你在表中得到的碰撞(用1M行,我把那大约 1:4000 的机会,对我来说太多了)。
所以:
checksum(newid())给出一个已经存在的主键,会发生什么?我的桌子会炸吗?插入是否会失败并将其留给应用程序如何处理?我正在运行一个查询,它有数十万条记录,获取数据需要 20 多分钟。运行执行计划后,我注意到聚集索引查找成本可能是原因。如何减少下面提到的查询的聚集索引查找成本?
外键的成本约为 13% 到 23%。
CREATE PROC [dbo].[Test] (@UserTypeID INT,
@UserID INT,
@CityID INT,
@OperatorID INT,
@ParameterID INT)
AS
BEGIN
DECLARE @temp TABLE (
range DECIMAL(18, 2),
range2 DECIMAL(18, 2),
image VARCHAR(50),
symbol VARCHAR(20))
IF( @UserID > 0 )
BEGIN
--print 'hii'
INSERT INTO @temp
(range,
range2,
image,
symbol)
SELECT tbl_Legend_ViewNetwork_Dtls.range,
tbl_Legend_ViewNetwork_Dtls.range2,
tbl_Legend_ViewNetwork_Dtls.image,
tbl_Legend_ViewNetwork_Dtls.symbol
FROM tbl_Legend_ViewNetwork_Dtls
INNER JOIN tbl_Legend_ViewNetwork
ON tbl_Legend_ViewNetwork_Dtls.tbl_legend_view_network_id = tbl_Legend_ViewNetwork.id
WHERE tbl_Legend_ViewNetwork.parameter_id = @ParameterID
AND tbl_Legend_ViewNetwork.user_type_id = @UserTypeID
AND tbl_Legend_ViewNetwork.is_default = 1
AND tbl_Legend_ViewNetwork.user_id = …Run Code Online (Sandbox Code Playgroud) 我有一个在多个位置复制的数据库。它被设置为事务复制。但是,现在我需要向表中添加更多列。添加更多存储过程等。因此,如果我在发布者中进行更改,它会跨订阅者复制还是会对复制产生负面影响?
建议会很有帮助。
我刚刚安装了 Ola Hallengren 的MaintenanceSolution.sql维护脚本。查看IndexOptimize - USER_DATABASES作业生成的日志输出后,我担心它不会更新统计信息。我担心的原因是我@UpdateStatistics = NULL在日志输出中列出的参数中看到:
Date and time: 2013-07-16 13:58:24
Server: XXXXX
Version: 10.0.5512.0
Edition: Standard Edition (64-bit)
Procedure: [PROD-PH].[dbo].[IndexOptimize]
Parameters: @Databases = 'USER_DATABASES', @FragmentationLow = NULL, @FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE', @FragmentationHigh = 'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE', @FragmentationLevel1 = 5, @FragmentationLevel2 = 30, @PageCountLevel = 1000, @SortInTempdb = 'N', @MaxDOP = NULL, @FillFactor = NULL, @PadIndex = NULL, @LOBCompaction = 'Y', @UpdateStatistics = NULL, @OnlyModifiedStatistics = 'N', @StatisticsSample = NULL, @StatisticsResample = 'N', @PartitionLevel = …Run Code Online (Sandbox Code Playgroud) sql-server-2008 ×10
sql-server ×7
audit ×1
deadlock ×1
foreign-key ×1
primary-key ×1
profiler ×1
ssis ×1
statistics ×1
users ×1