标签: sql-server

使用序列号/字符或任何唯一数据更新现有行

我在表 X 中添加了一个新列

“cn”这一列必须是唯一的和强制性的,但旧数据没有任何价值。

如何使用顺序或随机唯一数据更新现有记录?

谢谢你。

sql-server

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

Merge 语句的锁定选项是什么?

我有一个执行MERGE语句的存储过程。

在执行合并时,它似乎默认锁定整个表。

我在一个事务中调用这个存储过程,我也在做一些其他的事情,我希望它只会锁定受影响的行。

我尝试了提示MERGE INTO myTable WITH (READPAST),它似乎锁定较少。但是ms doc中有一个警告说它可以插入重复的键,甚至绕过主键。

这是我的表架构:

CREATE TABLE StudentDetails
(
StudentID INTEGER PRIMARY KEY,
StudentName VARCHAR(15)
)
GO
INSERT INTO StudentDetails
VALUES(1,'WANG')
INSERT INTO StudentDetails
VALUES(2,'JOHNSON')
GO

CREATE TABLE StudentTotalMarks
(
Id INT IDENTITY PRIMARY KEY,
StudentID INTEGER REFERENCES StudentDetails,
StudentMarks INTEGER
)
GO
INSERT INTO StudentTotalMarks
VALUES(1,230)
INSERT INTO StudentTotalMarks
VALUES(2,255)
GO
Run Code Online (Sandbox Code Playgroud)

这是我的存储过程:

CREATE PROCEDURE MergeTest 
    @StudentId int,
    @Mark int
AS  

WITH Params
AS
(
    SELECT @StudentId as StudentId,
        @Mark …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server merge

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

用于归档数据的表分区

设想:

  • 两个数据库:DB_A 和 DB_Archive,有一个非常大的表叫做 tableA。
  • 每天,超过 60 天的记录从 DB_A 中删除并移动到 DB_Archive 主要是为了让事物“分离”,因为 tableA 在 DB_A 上被大量查询过去 2 个月的记录。

我想摆脱这个过程,因为它很慢并且消耗大量资源。我正在考虑使用日期列上的分区函数在 DB_A 上实现表分区,并在一个分区上存储 < 2 个月的所有记录,在另一个分区上存储 > 2 个月的所有记录。我的问题:

  • 如果我有 2 个不同的数据库,这种情况是否会表现得像?如果我查询 tableA 中的记录 > getdate() - 30,它会读取归档分区吗?
  • 我想我也必须对索引进行分区,对吗?
  • 我如何处理明天我的分区函数将“更改”的事实,我的意思是,如果我今天创建该函数(7 月 2 日,其范围将是 5 月 2 日,但明天将是 5 月 3 日)。我可以创建动态分区函数吗?

sql-server-2005 sql-server partitioning

13
推荐指数
2
解决办法
4915
查看次数

重建索引,DB 现在大小是原来的 10 倍

我有一个大约 15 个演出的 SQL Server 数据库(2008 R2 SP1)。结果发现维护已经有一段时间没有运行了,所以我创建了一个维护计划来重建所有索引,它们非常分散。

工作完成,碎片消失了,但现在数据库超过 120 个演出!我知道它会使用额外的空间来进行所有重建,但是现在工作已经完成,我认为所有空间都将是可用空间,但可用空间仅显示为 3 个演出,因此正在使用 117 个演出即使索引重建作业已完成。

我很困惑,可以使用一些指导,我让数据库恢复到合理的大小,我们没有磁盘空间。

提前致谢!

这是发布的两个查询的结果:

log_reuse_wait_desc 什么都没有

name    TotalSpaceInMB  UsedSpaceInMB   FreeSpaceInMB
LIVE_Data   152             123             28
LIVE_Log    18939           89              18849
LIVE_1_Data 114977          111289          3688
Run Code Online (Sandbox Code Playgroud)

第三个文件是 .ndf 文件,该文件在未使用空间中仅显示 3688,但 111289 用于大约 15 演出数据。

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

13
推荐指数
2
解决办法
8454
查看次数

“TASK MANAGER”进程正在接管一个单用户模式的数据库。它是什么?

这是我在stackoverflow 上提出的问题的重复,但有人建议我,这里有人可以更好地了解发生了什么。

我有一个偶发的问题,当在单用户模式下升级 SQL Server 时,使用 .NET SqlConnection,其他一些应用程序以某种方式登录到数据库,同时执行 SQL 代码,并将我的进程踢出去。SqlConnection 不会以任何方式关闭或处理。但是其他一些应用程序以某种方式最终连接到数据库,这将我的连接踢出去。

当我运行 sp_who 时,我可以看到控制数据库的进程是 Command="TASK MANAGER"。

任何人都可以告诉我这个过程是什么,它的目的是什么,它究竟是如何进入数据库的,它是单用户模式,并且有一个活动连接?

sql-server-2008 sql-server

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

如何从字符串中去除非数字字符?

用户在一个框中输入一个搜索词,该值被传递到一个存储过程,并根据数据库中的几个不同字段进行检查。这些字段并不总是具有相同的数据类型。

一个字段(电话号码)由所有数字组成,因此在检查它时会使用 .Net CLR 函数从字符串中去除所有非数字字符。

SELECT dbo.RegexReplace('(123)123-4567', '[^0-9]', '')
Run Code Online (Sandbox Code Playgroud)

问题是,此功能有时会突然停止工作,并出现以下错误:

Msg 6533, Level 16, State 49, Line 2
AppDomain MyDBName.dbo[runtime].1575 被升级策略卸载,以确保 
应用程序的一致性。访问关键资源时发生内存不足。
System.Threading.ThreadAbortException:类型异常 
'System.Threading.ThreadAbortException' 被抛出。
System.Threading.ThreadAbortException: 

我已经尝试了MSDN 上针对此错误发布的建议,但仍然遇到问题。目前,切换到 64 位服务器不是我们的选择。

我知道重新启动服务器会释放它拥有的任何内存,但这在生产环境中不是一个可行的解决方案。

有没有办法仅使用 T-SQL 从 SQL Server 2005 中的字符串中去除非数字字符?

sql-server-2005 sql-server t-sql

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

镜像 - 无法访问服务器网络地址

我安装了 SQL Server 2008 R2。它包含三个实例。

  1. 默认 (MSSQLServer)
  2. 第一个例子
  3. 第二审

所有这些都是作为网络服务登录..

默认实例是主体服务器第一个实例是镜像第二个实例是见证服务器

我最初对我的主体数据库进行了完整备份和事务日志备份。通过保持相同的数据库名称将其恢复到第一个实例,恢复状态为无恢复

最后,我启动了镜像,并收到如下所示的两条错误消息。

在此处输入图片说明

在此处输入图片说明

sql-server-2005 sql-server-2008 sql-server mirroring

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

复制并重命名 db 以便我可以附加两个副本

我在服务器上有一个名为“mysite_db”的数据库,我在我的本地机器上创建了一个副本,它也是“mysite_db”。我想将数据库(从我的本地机器)附加到已经有这个数据库名称的服务器上。这意味着我必须更改本地数据库的名称(我想我还需要更改物理文件)。我不知道该怎么做。你能指导我吗?

我的目标是在服务器上加载 2 个数据库,例如:'mysite_db' 和 'myNewSite_db'

sql-server-2008 sql-server

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

了解 MS SQL Server 加密和备份

所以我在聊天询问SQL Server 备份文件的安全性。

有人告诉我,如果攻击者可以访问未加密的 .bak 文件,他们就可以访问数据。

所以让我们看看这个场景:

OPEN SYMMETRIC KEY MySymetricKey DECRYPTION
BY CERTIFICATE MyCertificate
Run Code Online (Sandbox Code Playgroud)

注意 - 这里没有密码。

然后我们通过以下方式加密我们的表:

UPDATE tbl1
 SET namePAss = ENCRYPTBYKEY(KEY_GUID('MySymetricKey'),name)
GO
Run Code Online (Sandbox Code Playgroud)

现在假设黑客得到了我的bak文件。为了查看数据(在他自己的计算机和 sql-server 中),他所要做的就是:

SELECT  
       convert( NVARCHAR(max), decryptbykey(namePAss)) 
FROM tbl1
Run Code Online (Sandbox Code Playgroud)

他还能访问数据吗?

security sql-server

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

为什么 SQL Server 不支持视图的外键约束?

我知道 SQL Server 不支持使用视图作为外键约束的参考,是否有原因(即与关系模型有关)是这种情况吗?好像会有用....

sql-server

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