标签: sql-server

MSSQL Server 2012 查询我们是否需要 T-SQL 来使用 IF 条件进行查询?

我有一个包含表 Student(StudId, StudName,...) 和 Grades (GradeExam1, GradeExam2,..) 等的数据库。我想做一个查询来为每个年级分配一个字母等级。我正在考虑做类似的事情:

SELECT StudId, GradeExam1 AS 'A' IF GradeExam1>= 90 AND GradeExam1 <=100
UNION
SELECT StudID, GradeExam1 AS 'B' ..........
Run Code Online (Sandbox Code Playgroud)

我知道我可以在普通 SQL 中使用非条件别名,但我从未在 SQL 查询中使用过条件别名。

或者我可能需要 T-SQL 来为给定的考试做一个循环,而不是为不同的条件做一个 select 语句的联合?

提前致谢。

sql-server t-sql

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

我可以创建一个视图来编辑 ID 映射表而不看到 ID 吗?

我有 2 个表,A 和 B,带有一个int主键和一个string名称。

我有一个第三个表 C,其中有 2 列将 A 和 B 的 ID 映射在一起。我想创建一个视图来编辑表 C 中的映射,但我希望视图显示Name值而不是IDs. 该视图将通过 SQL Server Management Studio 进行编辑。

例如,视图应该允许用户在项目列中输入“Item4”,在附件列中输入“Accessory1”,表 C 更新为新的行映射“4”到“1”。

在此处输入图片说明

我想知道是否可以将其设为可编辑视图,这样我就不必费心编写整个应用程序来管理它。

如果我转到 Microsoft SQL Server Management Studio 中的视图并右键单击,我可以编辑前 200 行。我知道此功能的限制是我只能在更改为单个表时进行编辑。我只会编辑一个表,所以可能有办法让它工作。有办法吗?(我的用户是熟悉 SQL Server 并且更喜欢直接访问他们的数据的人(交易员))。

sql-server ssms t-sql view

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

强制 T-SQL 查询使用并行性好吗?

这可以通过在查询选项中调用跟踪标志 8649 来完成。

OPTION (QUERYTRACEON 8649)

此跟踪标志导致查询的成本为 0,这将始终低于并行性的成本阈值,因此该查询将被视为并行计划。

试图以这种方式强制 T-SQL 查询使用并行性是否有任何缺点?

示例教程如何强制并行

performance sql-server optimization parallelism t-sql query-performance

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

SQL Server - varbinary(max) 如何存储 &gt; 8000 字节?

在 SQL Server 2005 和 2008 R2 中,我调用了一个存储过程,该存储过程的 out 参数定义为varbinary(max). 根据 .out 参数返回 10020 字节DATALENGTH

但是,如果我尝试定义大于 8000 字节的 varbinary,例如 varbinary(10000),则 SQL Server 会出错。例如

The size (10000) given to the type 'varbinary' exceeds the maximum allowed for any data type (8000).
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?SQL Server 如何返回超过数据类型允许的字节数?SQL Server 是否在幕后使用其他一些数据类型来保存 > 8000 字节?

sql-server-2005 sql-server sql-server-2008-r2 varbinary

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

删除此表分区的最佳方法是什么?

我必须将 Sql Server 2008 R2 中的分区表更改为普通表,以使我的数据库与 Sql Server 2016 标准版兼容。

实际上该表有 5 个分区,行数如下:

> boundary, rows 
2009-01-01 00:00:00.000 419 
2010-01-01 00:00:00.000 386031 
2011-01-01 00:00:00.000 1307990 
2012-01-01 00:00:00.000 673183 
NULL                    9743057
Run Code Online (Sandbox Code Playgroud)

该表包含一个 BLOB(图像)列。该表的总大小约为 25 GB。

我已经通读了如何删除表分区的问题但尽管它已经回答,但没有被接受的答案,而且这些答案并没有完全解决我的问题。

我意识到了ALTER PARTITION FUNCTION MERGE RANGE命令,但我真的不明白会发生什么。数据是否会被合并到现有文件组之一,之后我仍然会有一个分区表?

我是否必须将所有数据复制到具有相同结构的新表中(可能需要很长时间......)?

我将不得不在停机期间执行此操作,因此我需要一个尽可能高效的程序。

sql-server partitioning sql-server-2016

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

临时数据库中的高写入延迟

我目前处于一种“偶然的 dba”角色。我试图监视和改进数据库。我一直在使用 Udemy 课程中的脚本(我可以发布,但可能有点长)。我每小时运行它 5 分钟来捕获磁盘延迟样本,我不确定这是否是一个好方法。但是我注意到 tempdb 中有很多巨大的峰值,例如 300+ 毫秒,但通常会低一点。

tempdb 与数据文件位于同一磁盘上。我将建议使用单独的驱动器,理想情况下是 SSD,但目前我已将 tempdb 数据文件拆分为 4 个文件并使它们相当大,因此它们不需要经常自动增长。这种变化是否会造成峰值,不幸的是没有基线,因为所做的更改是为了改善某些问题。或者 tempdb 问题仅仅是性能不佳的第 3 方应用程序。任何建议将不胜感激!

这是 sp_blitz 降价

我已经隐藏了引用特定公司的任何数据库名称。

优先级 1:备份

  • 备份到数据库所在的同一驱动器 - 过去两周在驱动器 D:\ 上完成了 85 次备份,数据库文件也存在于此。如果该阵列出现故障,这表示严重的风险。

  • 无日志备份的完全恢复模式

    • COMPCRM - 上周未备份 500.00MB 的日志文件。

    • ClientManager - 上周没有备份 2.25MB 的日志文件。

    • CRMSelfService - 上周未备份 2.31MB 的日志文件。

    • VOIP.SDC - 上周没有备份 2362.81MB 的日志文件。

    • Elmah - 上周没有备份 20.94MB 的日志文件。

    • hMailServer - 上周没有备份 2.06MB 的日志文件。

    • NLog - 上周未备份 117.63MB 的日志文件。

    • ReportServer - 上周未备份 6.25MB 日志文件。

    • ACC_COMP_SYS_Be - 上周未备份 2599.13MB …

sql-server tempdb

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

如何在 SQL Server 2016 中设置自动增长?

如何在 SQL Server 2016 中设置自动增长值?数据库中通常的位置Properties -> Files不可用。

在此处输入图片说明

sql-server sql-server-2016

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

SQL 数据库中索引推荐使用的算法是什么?

我在 SQL Server 中使用了调优顾问工具,它根据给定的工作负载提供索引建议。

我想为 PostgreSQL 创建一个类似的工具。我浏览了一些研究论文。但我无法找到 SQL Server Tuning Adviser 用于提供索引建议的确切算法。

如果有人知道该算法或我可以从哪里获得该算法的任何来源,请指导我。请注意,我想根据工作负载提供建议,而不是针对单个查询。提前致谢。

postgresql index sql-server index-tuning

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

在 where 子句中使用日期时间和日期数据类型时是否有截止时间?

我有一个标题为reached_date的列。在我的查询中,该列的大部分值是2016-09-30 23:59:59.997

然后我有一个 where 子句,内容如下:

WHERE achieved_date between '20160901' and '20160930'
Run Code Online (Sandbox Code Playgroud)

具有 2016-09-30 23:59:59.997 值的记录没有包含在我应该包含的结果中。我的意思是交易记录在 9 月 30 日。

如果这是一个奇怪的数据类型问题,有什么想法吗?

sql-server datatypes t-sql datetime date

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

这个 MERGE 语句中的更新是多余的吗?

我正在尝试提高复杂存储过程的性能。存储过程内部是以下MERGE语句。我对MERGE语法不是很熟悉。

[Contact].[PhoneNumber]表如下所示:

CREATE TABLE [Contact].[PhoneNumber]
(
    [Id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
    [PhoneNumber] [nvarchar](255) NOT NULL
    [InsertedAtDateTimeUTC] [datetime2](7) NOT NULL DEFAULT(sysutcdatetime())
)
Run Code Online (Sandbox Code Playgroud)

合并看起来像这样:

;WITH _ContactPhoneNumbers ([PhoneNumber]) AS 
(
    SELECT DISTINCT ([#ChannelData].[CallerAni])
    FROM [#ChannelData]
)
MERGE [Contact].[PhoneNumber] WITH (HOLDLOCK) _target
USING [_ContactPhoneNumbers] _source ON [_target].[PhoneNumber] = [_source].[PhoneNumber]

WHEN NOT MATCHED THEN
    INSERT ([PhoneNumber])
    VALUES ([PhoneNumber])

WHEN MATCHED THEN
    UPDATE 
        SET [_target].[PhoneNumber] = [_source].[PhoneNumber]
        OUTPUT INSERTED.[Id], [_source].[PhoneNumber] INTO #Contact_PhoneNumber_Output ([Id], [PhoneNumber]);   
Run Code Online (Sandbox Code Playgroud)

我把它读为:

如果表PhoneNumber中不存在 …

sql-server t-sql sql-server-2008-r2 merge

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