小编Low*_*n M的帖子

在数据库表中使用 SPID(而不是表变量)

用于预订事物的事务性数据库...

我们的供应商被要求用@tablevariables 替换#temptables(因为编译锁很重),但他们用一个实际的表来替换,该表将SPID 添加为一列,以确保存储过程只作用于适用的行。

您认为这种操作方法有什么风险吗?在所有事务都被隔离在他们自己的事务中之前......我担心我们最终可能会锁定这个表,但他们的意见是 SQL 使用行级锁定,这不会创建更多的锁。

SQL Server 版本:2016 企业版 - 13.0.5216.0


CREATE TABLE dbo.qryTransactions (
    ID int IDENTITY (0,1) NOT NULL CONSTRAINT pk_qryTransactions PRIMARY KEY CLUSTERED,
    spid int NOT NULL,
    OrderID int,
    ItemID int,
    TimeTransactionStart datetime,
    TimeTransactionEnd datetime,
...other fields
    )

CREATE INDEX idx_qryTransactions_spidID ON qryTransactions (spid, ID) INCLUDE (ItemID, OrderID, TimeTransactionStart, TimeTransactionEnd)

Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures sql-server-2016 enterprise-edition table-variable

8
推荐指数
2
解决办法
923
查看次数

<set 子句> 的 <multiple column assignment>

我只知道一点 sql 基础知识,需要编写一个简单的 sql 语法荧光笔/检查器所以我正在努力通过标准......我偶然发现了一些我不确定我是否理解正确的东西,因为我从未见过有人使用一个SET以这种方式。

它的定义如下所示:

<multiple column assignment> ::=
<set target list> <equals operator> <assigned row>
Run Code Online (Sandbox Code Playgroud)

以这种方式定义设置目标列表的地方:

<set target list> ::=
<left paren> <set target> [ { <comma> <set target> }... ] <right paren>
Run Code Online (Sandbox Code Playgroud)

这对我来说听起来是可以做到的:

UPDATE ...
SET (A, B, C) = (1, 2, 3)
Run Code Online (Sandbox Code Playgroud)

将 A 的值更新为 1,B 的值更新为 2,C 的值更新为 3。

我让反刍的是=因为我从来没有见过这样的 SET 并且在网上找不到任何使用这种方式的例子。

所以我也不确定是否正确理解整个定义。

有人能告诉我这是正确的吗?如果不是这样,你能解释一下这个定义的其他定义吗?

sql-standard

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

为什么我的查询在环境 A 中运行得很快,而在环境 B 中却很慢?

我有一段 SQL 似乎在环境 A 中运行得非常快,但完全相同的查询在环境 B 中运行得非常慢!

环境应该是相同的,所以我应该做什么和/或我应该在哪里查看查询为什么不执行相同?

performance sql-server execution-plan query-performance

7
推荐指数
2
解决办法
9392
查看次数

格式 'G17' 与 'G'

我有一个关于这个小提琴的问题:

DECLARE @TestVal AS float = 8.88;
SELECT flt = @TestVal
    , xml = (SELECT Value = @TestVal FOR XML PATH(''), TYPE)
    , fmt17 = FORMAT(@TestVal, 'G17')
    , fmt = FORMAT(@TestVal, 'G')
    , cst = CAST(@TestVal AS nvarchar(50))
    , fmt17_roundtrip = CAST(FORMAT(@TestVal, 'G17') AS float)
    , fmt_roundtrip = CAST(FORMAT(@TestVal, 'G') AS float)
    , cst_roundtrip = CAST(CAST(@TestVal AS nvarchar(50)) AS float)
;
Run Code Online (Sandbox Code Playgroud)

https://dbfiddle.uk?rdbms=sqlserver_2019&fiddle=0cf05f882eb24f53e9484f043af99446

我在默认情况下以科学记数法输出某些 XML 时遇到了麻烦,虽然这些 XML 不正确或不准确,但可读性并不差。

我最初使用 FORMAT(floatcol, 'G17') 因为这个文档页面上的评论:

请注意,当与 Double 值一起使用时,“G17”格式说明符可确保原始 Double 值成功往返。这是因为 Double 是符合 …

sql-server sql-server-2012

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

如果 T-SQL 变量已经存在,如何重新声明它?

背景:

我正在构建一个要在服务器上执行的 SQL 命令,该命令涉及大量访问存储过程和声明用作其他存储过程输入的变量。这都是在客户端使用 C# 生成的,并作为一个大包发送。我必须这样做,因为 ping 时间很长,因为客户端将位于非常远程且连接不良的地方,而且我不想发送很多包并由于响应时间长而开始建立积压。

目前最多三个客户端可以并行工作,或者他们开始​​建立积压,因为一个大约 200 个存储过程的事务的传输速度需要大约 35 秒。

题:

如果它已经存在,我如何声明一个我现在没有的变量?我可以在 C# 端使用字典,但这对我来说听起来像是错误的方法。我想要一个声明,如果它确实存在,它接受重新声明该变量。

sql-server t-sql c#

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

AWS RDS - 更改实例类

所以我对 AWS 还很陌生,我希望你们可以让我放心,因为我在 AWS 文档中找不到任何内容。其实我有两个问题,第一个:

我在 AWS 中有一个 RDS MySql 实例,它不是我自己设置的(以前的员工这样做了)。这个实例比我们需要的更强大,所以我想减少它的实例类以降低成本。当前实例是多可用区配置。

  1. 我可以简单地更改它并在下一次维护计划中应用更改而不会丢失数据吗?

  2. 如何确定当前使用了多少 RDS 存储?如果可能的话,我想减少它,因为我们甚至没有使用它的 50%。

mysql aws amazon-rds

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

从内存中读取数据后,什么时候从内存中删除(基于磁盘的)表?

(基于磁盘,所以没有 Hekaton)表在内存中的持久化时间是否超过从它们读取数据的查询的生命周期?

如果是这样,是什么决定了它们在内存中停留的时间?

有没有办法管理它们在内存中持续多长时间?

sql-server memory table buffer-pool

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

自动每日备份数据库

我正在尝试在 SQL Server 2008 R2 中创建数据库的自动/每日备份。我做了一些研究,当我使用 Express 版本时我才知道;这不附带维护计划,我无法自动/每天创建数据库备份。因此,唯一的可能性是我必须使用 TSQL 或创建 Job。我对 SQL Job 了解不多,所以只剩下 T-SQL 了。

任何人都可以向我解释如何使用存储过程在 T-SQL 中自动备份数据库,或者我是否还有其他选项必须这样做。

问候。

sql-server sql-server-2008-r2 sql-server-express

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

System.Data.Entity.Infrastructure.CommitFailedException:C# 多线程和 SQL Server 2012

我们有一个 C# 多线程(100 个线程)程序,它从数据库中读取记录,每个线程获取一条记录(每个线程一个实体框架连接)并更新单个数据库表。

前几分钟(5 分钟)程序正常运行,然后突然所有线程开始抛出以下错误消息.. 约 1 分钟后,一切都会恢复正常阶段.. 我认为 SQL Server 也越来越好了单个数据库表的许多锁(可能正在尝试获取该表上的表锁)或与单个数据库的连接过多并关闭所有连接..

我无法调试这个,有人可以帮助我获取以下信息,

  1. SQL Server 2012 在哪里存储其日志?

  2. 我们可以提高日志级别以查看为什么在保存数据库实体时会抛出异常

  3. 如何获取每个表的锁数,DB 获取的不同类型的锁(表锁、页锁、行锁数等)

调试此问题的任何其他指针。

仅供参考,我在从这个 cmd 得到的 sqlerror 日志中没有发现任何有用的东西:

SELECT SERVERPROPERTY('ErrorLogFileName')

这是异常的堆栈跟踪:

System.Data.Entity.Infrastructure.CommitFailedException: An error was reported while committing a database transaction but it could not be determined whether the transaction succeeded or failed on the database server. See the inner exception and http://go.microsoft.com/fwlink/?LinkId=313468 for more information.

System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the …
Run Code Online (Sandbox Code Playgroud)

sql-server bulkcopy c#

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

SQL Server 兼容级别是否引入了旧的安全漏洞

任何人都可以帮助解决我认为是一个简单的问题。

一位 DBA 朋友和我讨论了一般的兼容性级别,特别是它们与安全性的关系。他认为,使它们尽可能最新的一个很好的理由是减少由它们引起的安全漏洞。我反驳说,以前的 SP 和当前的 CU 和修补程序肯定会修补这些漏洞,即在 2014 SQL Server 实例中以 2005 兼容模式运行数据库肯定不会将该数据库恢复到 2005 SP4 安全级别/漏洞。

我一直在寻找支持此声明的文档,但一直找不到。有没有人知道任何权威文档可以告诉我正确或错误?

sql-server t-sql compatibility-level

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