标签: sql-server-2008

如何强制使用可为空的外键?

我有两个表之间的关系。外键表可以在主表中有一行相关。有没有办法将 FK 列的值强制为 NULL 或主表中 PK 列的值之一?

sql-server-2008 foreign-key database-design sql-server

4
推荐指数
1
解决办法
7565
查看次数

如何查找用户有权访问的表和视图?

我们有一个 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-server-2008 access-control sql-server-2008-r2 users

4
推荐指数
1
解决办法
4万
查看次数

我可以在事件发生时收到通知吗?

SQL Servers 有跟踪和 XEvents。这些用于捕获和分析 SQL Server 实例发生的情况。事件存储在堆栈中供以后分析。例如,如果我决定监视数据库中的任何死锁,我只是查询跟踪文件以查看一段时间内死锁的历史记录。这是我的问题:

当事件发生时,在我们的死锁事件示例中,有没有办法使用 msdb.dbo.xp_send_dbmail 获取电子邮件通知?

sql-server-2008 sql-server deadlock profiler extended-events

4
推荐指数
2
解决办法
3436
查看次数

日志文件增长问题

我们每晚都将来自一堆数据库的数据整合到四个报告数据库中。

因为每晚都会导入整个数据集,所以我们不需要能够将数据恢复到某个时间点。因此数据库处于简单恢复模式。

然而,每次我们运行导入时,我们的数据库ldf文件都会变得非常大(50+ Gig)。

有没有办法完全关闭日志记录或让 SQL Server 更快地清除这些日志文件?

我猜没有进行结算的log_reuse_wait_descACTIVE_TRANSACTION

sql-server-2008 transaction-log

4
推荐指数
1
解决办法
136
查看次数

触发器性能:使用触发器是一种好方法吗?

我们正在使用SQL Server 2008j2ee Web 应用程序。我需要维护每个列的更新审计,其中有一个表非常重,大约有 100 列和 10K 条记录,并且每天都在快速增加。大约 200 名用户使用此应用程序,更新也非常频繁。我知道通过代码处理它需要非常频繁地连接到数据库。我想知道哪种方法更好。通过代码处理它会提供比使用它更好的性能SQL Server trigger

sql-server-2008 audit

4
推荐指数
3
解决办法
1万
查看次数

将 SQL Server 2012 SSIS 包转换为 2008

我在 SQL Server 2012 中创建了一些需要在 SQL Server 2008 上运行的 SSIS 包。有人告诉我,在当前状态下这是不可能的。

有没有办法将 2012 包转换为 2008 版本?

如果没有,我的选择是什么?重来?

sql-server-2008 sql-server ssis sql-server-2012

4
推荐指数
1
解决办法
1万
查看次数

checksum(newid()) 作为主键 - 如果发生冲突会发生什么?

检查我系统上某些软件使用的相当关键的数据库,我发现其中一个表在列上有一个主键Id,其中Id使用checksum(newid()). 这让我感到不安;在newids的保证是独一无二的,但通过将校验和(一个32位整数,大概是出于性能的原因?),你有一些机会,你在表中得到的碰撞(用1M行,我把那大约 1:4000 的机会,对我来说太多了)。

所以:

  • 我是否遗漏了一些关键的信息,表明上述内容实际上没问题?
  • 如果不是 - 如果应用程序尝试向表中插入新行并checksum(newid())给出一个已经存在的主键,会发生什么?我的桌子会炸吗?插入是否会失败并将其留给应用程序如何处理?

sql-server-2008 sql-server primary-key unique-constraint

4
推荐指数
1
解决办法
1824
查看次数

降低聚集索引查找成本 SQL Server 2008 R2

我正在运行一个查询,它有数十万条记录,获取数据需要 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)

sql-server-2008 sql-server

4
推荐指数
1
解决办法
1万
查看次数

事务复制更改表和添加存储过程

我有一个在多个位置复制的数据库。它被设置为事务复制。但是,现在我需要向表中添加更多列。添加更多存储过程等。因此,如果我在发布者中进行更改,它会跨订阅者复制还是会对复制产生负面影响?

建议会很有帮助。

sql-server-2008 sql-server transactional-replication

4
推荐指数
1
解决办法
8618
查看次数

Ola 的默认 IndexOptimizer 作业会更新我的统计信息吗?

我刚刚安装了 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 sql-server statistics ola-hallengren

4
推荐指数
1
解决办法
2047
查看次数