标签: sql-server-2008

涉及 XML 列的两个类似查询的相对成本

我有两个查询,如下所示,它们做同样的事情。这xmlcolumn是一个数据类型为 XML 的列。我使用这些查询在 XML 列中的任何位置搜索字符串。

我检查了这两个查询的执行计划,发现第一个查询的 I/O 成本和子树成本低于第二个。我原以为第一个会在使用cast和 时具有更高的成本charindex,但事实并非如此。

为什么它的成本更低?

第一个查询:

SELECT * 
FROM mytable
WHERE ( Charindex('abc',CAST([xmlcolumn] AS VARCHAR(MAX)))>0 ) 
Run Code Online (Sandbox Code Playgroud)

第二个查询:

SELECT * 
FROM mytable t1
WHERE t1.[xmlcolumn].exist('//*/text()[contains(.,"abc")]')=1
Run Code Online (Sandbox Code Playgroud)

performance sql-server-2008 xml execution-plan

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

对单个表的访问权限列入白名单

是否可以将特定表的访问列入白名单(例如包含密码哈希加盐)?

我的理想情况是任何人都可以通过存储过程实现插入、更新、删除和选择的权限为零。

我该如何设置?

sql-server-2008 permissions

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

查找缺失的索引

可用于在 mssql 2008 中查找缺失索引的工具?我们可以使用数据库引擎优化顾问找到丢失的索引吗

index sql-server-2008 sql-server

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

SQL Server Express 中的 SQL Server 代理选项

我正在使用 SQL Server 2008 Express。我没有 SQL Server 代理选项。我怎样才能启用它?

我在互联网上搜索过,但找不到任何东西。我需要安装什么吗?

sql-server-2008 sql-server-express sql-server-agent

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

SQL Server 2008:高 CPU 历史查询

我们有一个带有 15 个数据库的 SQL Server。这被每个数据库中的许多用户同时使用。最近,我们开始从该服务器收到高 CPU 警报。当警报出现时,我可以跟踪到确切的用户和查询。

我们无法在此服务器上打开 SQL Server Profiler。我想知道我们是否可以使用任何脚本获取有关在任何数据库(导致高 CPU)中运行的历史昂贵查询的信息。例如 - 我需要过去 4 小时内最昂贵的查询以及数据库名称和用户名。

sql-server-2008 sql-server profiler

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

多个可为空列的唯一约束Sql Server

我们有一个包含以下列的 PriceCombo 表:id(非空)、a_id(空)、b_id(空)、c_id(空)、折扣(非空)。我们正在使用此表来确定分配各种商品组合的价格。

a_id = id of region
b_id = id of merchandize category
c_id = id of customer category
Run Code Online (Sandbox Code Playgroud)

所以基本上,我们总是知道 a、b 和 c,但我们有一个灵活的折扣方案,这样每笔销售都按照我们能找到的最具体的规则进行折扣。

我们的问题是我们无法防止数据库中的重复,例如,我们希望防止在 a_id、b_id 和 c_id 中具有相同值的两行

a_id=1, b_id=1, c_id=1    and
a_id=1, b_id=1, c_id=1 
Run Code Online (Sandbox Code Playgroud)

不被允许和

a_id=1, b_id=1, c_id=null   and
a_id=1, b_id=1, c_id=null
Run Code Online (Sandbox Code Playgroud)

不被允许,但

a_id=1, b_id=1, c_id=null  and
a_id=1, b_id=null, c_id=null
Run Code Online (Sandbox Code Playgroud)

是允许的,因为这些在这 3 列方面不相同。

我在任何地方都没有找到关于如何创建唯一约束的答案,该约束既跨越多列又允许空值但不允许“相同”(至少在约束中指定的列方面)行

sql-server-2008 sql-server constraint unique-constraint

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

在扩展事件中 rpc_completed 和 sql_batch_completed 有什么区别?

我理解这rpc_completed被定义为远程过程调用sql_batch_completed的完成,并且是一个 t-sql 批处理的完成。但是,谁能具体解释一下有什么区别?我什么时候应该使用一种,什么时候应该使用另一种?大多数/所有 SQL 命令都会触发这两个事件吗?

sql-server-2008 sql-server-2008-r2 extended-events sql-server-2012

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

SQL Server 日志文件继续增长?

我遇到了 SQL Server 日志文件的问题,该文件无法在已发布的 HDD 上保持稳定的空间量。驱动器大约为 50GB,并且日志文件越来越频繁地占用它。

数据库设置为完整恢复模式,每小时进行一次差异备份。我知道这应该允许日志文件截断并使用已经分配给它的空间?

当使用DBCC LOGINFO它检查日志文件的状态时,它返回文件中大多数 VLF 的状态设置为“2”,这表明它们处于活动状态?我们在日志文件中有 537 个 VLF。我不知道为什么所有这些都会使用 15GB 的空间同时处于活动状态?

我已经检查了复制DBCC OPENTRAN,它报告说文件上没有主动打开的事务。

有没有一种我可能会忽略的维护这个文件的方法?

有什么地方可以去确定日志文件在做什么?

复制会干扰截断/缩小日志文件吗?

目前,它每天增长约 1.67GB。在我不得不执行一些缩小文件的紧急工作之前,我有大约 18 天的时间。如果可能的话,我希望它保持在 25GB 以下,以便在突然需要空间时有足够的增长空间。

sql-server-2008 transaction-log

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

如何将值表从 SSIS 传递给存储过程?

我对 SSIS 真的很陌生,所以我为“愚蠢”的问题道歉。我知道开放式的“最佳实践”问题很不受欢迎,所以我会尽量具体。

我有一个基本的 SSIS 包,它将数据从一个 SQL 数据库移动到另一个 SQL 数据库。在数据流任务部分中,只有很少的数据转换和一个过滤器在进行。我一直试图想出一种将数据写入目的地的好方法,但它不能直接进入“最终”表(就像我在数据流目的地任务中所做的那样)。我更愿意将它作为变量传递给存储过程。我看到两个选项,我都不喜欢这两个选项:

  1. 我可以使用 OLE DB 命令并逐行循环我的数据,为每个数据运行存储过程。
  2. 我可以将数据写入临时表并从控制流部分调用存储过程。

对于选项 1,必须遍历每个数据行似乎非常糟糕。有没有办法调用存储过程并传递给它一个表?

我在工作中有人告诉我不要使用临时表,所以选项 2 似乎不在表中。我想如果我有理由使用选项 2,作为“最佳实践”,我可能能够说服他们让我以这种方式加载数据。

我错过了什么吗?有没有其他方法可以解决这个问题?如果您能在答案中附上原因,将不胜感激,因为我正在尝试理解押韵和原因。

编辑:为了澄清,我试图找到一种传递表值参数的好方法。

sql-server-2008 sql-server ssis

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

从本地 SQL Server 2008 R2 获取 SQL Server 2012 的数据库备份

我有一个 SQL Server 2012 安装,它在 SQL Server 代理方面存在一些问题,因此我无法安排作业或维护计划来进行备份。

我想要做的是在 SQL Server 2008 R2 上创建一个 SQL Server 作业并备份 SQL Server 2012 数据库。有人可以建议如何实现这一目标吗?

sql-server-2008 sql-server

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