标签: sql-server

处理代码分支之间共享的数据库模式的有效方法是什么?

处理具有多个分支的项目,其中每个分支最终会合并回主分支,并且本质上是孤立的,以便开发新功能。

数据库,即 MS SQL Server,有一个共享架构,但是每个分支都会随着它的进展对架构进行更改。

我的主要问题是什么是处理从主分支到派生分支共享架构的好方法,以便对主分支所做的更改可以轻松合并到派生分支中,而无需在派生分支中进行新更改分支?

sql-server version-control

12
推荐指数
2
解决办法
2823
查看次数

在 T-SQL 中使用 CAST 的性能下降

我们有一个 SQL 生成器,它通常为指定的字段发出 SQL 条件语句(为了讨论:我们将标记为myField)。

如果myField是类型的NVARCHAR,我们能做到说场对像这样的字符串的比较:myField = 'foo'

但是,这不适用于类型为 的字段NTEXT。因此,我们必须与演员表进行比较: CAST(myField as NVARCHAR(MAX)) = 'foo'。如果myFieldNVARCHAR或类型,这实际上会起作用NTEXT

已经是类型的字段上进行上述演员表的性能影响是什么NVARCHAR?我希望 SQL Server 足够聪明,可以动态识别myField已经是类型的NVARCHAR(有效地将其CAST转换为无操作)。

performance sql-server type-conversion

12
推荐指数
3
解决办法
2万
查看次数

如何创建在镜像状态更改时运行作业/过程的事件通知

我按照这个问题的顺序问这个问题我可以使用 T-SQL 通过 TCP 发送一个字符串吗?

Remus Rusanu 揭示了它似乎是我问题的最佳解决方案,但是......我太不成熟了,无法理解和理解他所说的一切。

到目前为止,我认为我需要为 DATABASE_MIRRORING_STATE_CHANGE 创建通知事件,我说得对吗?

我如何创建此事件通知,以使其触发时在表中插入一行,该行存储来自通知的时间戳和 ID。

到目前为止,我正在为每个 ID 设置一个警报,每个警报都运行这样的作业(此示例适用于 ID = 1):

    DECLARE @state AS varchar(50);
    SELECT @state = mirroring_state_desc FROM SYS.database_mirroring WHERE mirroring_guid IS NOT NULL;
    IF (@state IS null) SET @state = ' ';
    INSERT INTO MirroringAlerts (DateTime, alertID, alertDesc, Sync, alertCreator) values (SYSDATETIME(), 1, 'Principal synchronized with W ', @state, @@SERVERNAME)
Run Code Online (Sandbox Code Playgroud)

基本上我在这个数据库中创建一个内部日志:

CREATE TABLE [dbo].[MirroringAlerts](
    [DateTime] [datetime] NOT NULL,
    [alertID] [smallint] NOT NULL,
    [alertDesc] [nchar](50) NOT NULL,
    [Sync] [nchar](12) …
Run Code Online (Sandbox Code Playgroud)

sql-server mirroring sql-server-2008-r2

12
推荐指数
2
解决办法
9913
查看次数

哪个更快加入

哪个更快

SELECT * FROM X INNER JOIN Y ON x.Record_ID = y.ForignKey_NotIndexed_NotUnique
Run Code Online (Sandbox Code Playgroud)

或者

SELECT * FROM X INNER JOIN Y ON y.ForignKey_NotIndexed_NotUnique = x.Record_ID
Run Code Online (Sandbox Code Playgroud)

performance join sql-server optimization

12
推荐指数
2
解决办法
343
查看次数

用户定义表类型的 sp_executesql 行为不正确

问题

用户定义的表类型作为sp_executesql 的参数是否存在已知问题?

设置脚本

此脚本创建一个表、过程和用户​​定义的表类型(仅限 SQL Server 2008+)。

  • 堆的目的是提供一个审计,是的,数据进入了程序。没有限制,没有任何东西可以阻止数据被插入。
  • 该过程将用户定义的表类型作为参数。proc 所做的就是插入到表中。
  • 用户定义的表类型也很简单,只有一列

我已经运行了以下内容11.0.1750.32 (X64)10.0.4064.0 (X64)是的,我知道可以修补该框,但我无法控制。

-- this table record that something happened
CREATE TABLE dbo.UDTT_holder
(
    ServerName varchar(200)
,   insert_time datetime default(current_timestamp)
)
GO

-- user defined table type transport mechanism
CREATE TYPE dbo.UDTT
AS TABLE
(
    ServerName varchar(200)
)
GO

-- Stored Procedure to reproduce issue
CREATE PROCEDURE dbo.Repro
(
    @MetricData dbo.UDTT READONLY
)
AS
BEGIN
    SET NOCOUNT ON

    INSERT INTO dbo.UDTT_holder 
    (ServerName) …
Run Code Online (Sandbox Code Playgroud)

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

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

从 RESTORE HEADERONLY 中提取字段

我正在尝试使用“ RESTORE HEADERONLY ”来获取我将要恢复的备份的日期。

命令:

RESTORE HEADERONLY FROM DISK = '<path to .bak file>'
Run Code Online (Sandbox Code Playgroud)

在查询分析器中工作正常,并提供一个包含 50 列之类的结果集。

问题实际上是从代码访问它。

我可以通过声明 50:ish 列中的每一个将其放入临时表中,插入其中exec并从那里获取我想要的值。

问题是我真的想避免将整个结果集声明为临时表,因为如果他们在未来的版本中向其中添加列,这似乎是一个非常脆弱的解决方案。

有没有办法只从这个结果集中获取一列而不声明所有列?

sql-server sql-server-2008-r2 restore

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

在数据库设计中夸大字段大小

我的表中有一些字段是字符串,目前,大多数字段大小都有很高的字符限制。例如,街道名称为 100 个字符。使用大字段大小是否有惩罚?例如,如果我将此字段的限制更改为 30 个字符,是否会提高性能或提高效率?大约有 50 个字段可以作为收缩的候选对象。

感谢您的建议。

sql-server

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

哪些客观因素表明是时候实施 SQL Server 复制了?

我试图在我们数据库的高性能和易于维护之间取得平衡。我们正在考虑使用复制来提高性能,方法是将我们的 SSRS 报告复制到与我们的事务数据库物理分离的数据库中。但是,从开发人员的角度来看,启用复制有许多缺点:

  • 它使架构更改更加困难
  • 它会干扰我们的自动集成/构建服务器
  • 似乎很难实现SQL源代码控制

我的问题是:鉴于这些缺点,您什么时候知道是时候进行复制了?您如何确定额外的复杂性是否证明了收益的合理性?

我们以前使用过它,因此设置它不是问题。这更多是关于做出启用或不启用它的决定。我正在寻找其他人通过复制观察到的一些对象性能指标。

当然,最好的办法是在我们自己的服务器上进行一些模拟负载测试并自己解决,但我希望有一些通用的指导方针。

replication sql-server

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

SQL Server DBA 需要了解哪些有关 Windows Server 的知识?

类似于我之前的问题DBA 必须了解 SSAS 什么?,这产生了一个非常好的答案(谢谢,@ConcernedOfTunbridgeWells!),我现在问一个类似的问题:

SQL Server DBA 需要了解有关 Windows Server 的哪些信息才能有效地管理它并了解幕后发生的事情,以及了解 SQL Server 运行的底层操作系统在多大程度上很重要成为一名优秀的 DBA?

它可以是个性化的功能,书籍,从经验中,你说出来!

sql-server windows

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

您知道一种为过去 12 小时中的每一小时生成一条记录的简单方法吗?

我有一份报告,显示过去 12 小时的事件计数,按小时分组。听起来很容易,但我正在努力解决的是如何包含弥补差距的记录。

这是一个示例表:

Event
(
  EventTime datetime,
  EventType int
)
Run Code Online (Sandbox Code Playgroud)

数据如下所示:

  '2012-03-08 08:00:04', 1
  '2012-03-08 09:10:00', 2
  '2012-03-08 09:11:04', 2
  '2012-03-08 09:10:09', 1
  '2012-03-08 10:00:17', 4
  '2012-03-08 11:00:04', 1
Run Code Online (Sandbox Code Playgroud)

我需要创建一个结果集,该结果集在过去 12 小时内的每一小时都有一个记录,无论该小时内是否有事件。

假设当前时间是“2012-03-08 11:00:00”,报告将显示(大致):

Hour  EventCount
----  ----------
23    0
0     0
1     0
2     0
3     0
4     0
5     0
6     0
7     0
8     1
9     3
10    1
Run Code Online (Sandbox Code Playgroud)

我想出了一个解决方案,该解决方案使用一个每天每小时都有一个记录的表。我设法在 where 子句中使用 UNION 和一些令人费解的大小写逻辑获得了我正在寻找的结果,但我希望有人有更优雅的解决方案。

sql-server-2005 sql-server

12
推荐指数
3
解决办法
2万
查看次数