SqlServer geography 空间类型数据

geography

空间数据类型 geography 用来表示圆形地球空间坐标系中的数据,如 GPS 经纬度坐标。

SqlServer 提供一些列方法用于创建、构造和查询这些数据。具体信息请参照 MSDN 文档

SQL Server 使用 DATEDIFF 函数来查看毫秒级的执行时间

在 MSSM 中显示的查询耗时是秒级的,没有毫秒。下面是使用 DATEDIFF 函数来查看毫秒级的耗时的方法。

DECLARE @start_time DATETIME, @end_time DATETIME

SET @start_time = GETDATE()

-- exec some sqls

SET @end_time = GETDATE()

SELECT DATEDIFF(MS, @start_time, @end_time) AS [耗时(毫秒)]
WITH(NOLOCK) & IsolationLevel.ReadUncommitted

为了防止查询不被修改阻塞,在一些允许脏读的查询里使用了 WITH(NOLOCK) 关键字。

另外因为数据库使用了主从结构,从库作为只读库,按照编码规约,所有的查询都应该加上 WITH(NOLOCK) 关键字。但是在实际编码的过程中,有些地方并没有遵循该规约。

So,准备在读库的连接上通过设置隔离级别(IsolationLevel)为 IsolationLevel.ReadUncommitted 来防止被阻塞。

那么 WITH(NOLOCK) & IsolationLevel.ReadUncommitted 有什么区别呢?

SQL 禁用外键约束

启用禁用约束

今天逛论坛才发现外键约束还是可以禁用的。

使用 NOCHECK CONSTRAINTALTER TABLE 配合来禁用约束。

ALTER TABLE [dbo].[TableName] NOCHECK CONSTRAINT [FK_TableName_OtherTableName]
SQL Server 中比较末尾带空格的字符串

在 Sql Server 中,一个 nvarchar 型的字段,如果该字段值的末尾有空格,即使用不带空格的字符串去查询,也能够查询出来。

下面是摘自 SQLServer 中比较末尾带有空格的字符串遇到的坑 中的例子:

declare @a nvarchar(50);set @a=N'happycat1988'
declare @b nvarchar(50);set @b=N'happycat1988 '

if(@a = @b)
    select 'True' as 直接等号比较
else
    select 'False' as 直接等号比较

if(@a like @b)
    select 'True' as like比较
else
    select 'False' as like比较
SqlException: A transport-level error has occurred when receiving results from the server.

现象

新项目使用了 .NET Core 来开发,上线到生产后会不定时的报如下 SqlException:

A transport-level error has occurred when receiving results from the server. (provider: TCP Provider, error: 0 - Success)

生产的数据库(SqlServer)采用的一写多读的配置,读库采用 HAProxy 实现负载均衡。
在 HAProxy 中设置了数据库连接的超时时间(50s),超过该时间则将数据库连接关闭。
写库由于是单台,采用的是直连。

SqlServer FOR XML PATH

将查询结果集以 XML 形式展现,也可以自定义输出格式

格式

SELECT * FROM TABLENAME FOR XML PATH