我在表 X 中添加了一个新列
“cn”这一列必须是唯一的和强制性的,但旧数据没有任何价值。
如何使用顺序或随机唯一数据更新现有记录?
谢谢你。
我有一个执行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) 设想:
我想摆脱这个过程,因为它很慢并且消耗大量资源。我正在考虑使用日期列上的分区函数在 DB_A 上实现表分区,并在一个分区上存储 < 2 个月的所有记录,在另一个分区上存储 > 2 个月的所有记录。我的问题:
我有一个大约 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 演出数据。
这是我在stackoverflow 上提出的问题的重复,但有人建议我,这里有人可以更好地了解发生了什么。
我有一个偶发的问题,当在单用户模式下升级 SQL Server 时,使用 .NET SqlConnection,其他一些应用程序以某种方式登录到数据库,同时执行 SQL 代码,并将我的进程踢出去。SqlConnection 不会以任何方式关闭或处理。但是其他一些应用程序以某种方式最终连接到数据库,这将我的连接踢出去。
当我运行 sp_who 时,我可以看到控制数据库的进程是 Command="TASK MANAGER"。
任何人都可以告诉我这个过程是什么,它的目的是什么,它究竟是如何进入数据库的,它是单用户模式,并且有一个活动连接?
用户在一个框中输入一个搜索词,该值被传递到一个存储过程,并根据数据库中的几个不同字段进行检查。这些字段并不总是具有相同的数据类型。
一个字段(电话号码)由所有数字组成,因此在检查它时会使用 .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 2008 R2。它包含三个实例。
所有这些都是作为网络服务登录..
默认实例是主体服务器第一个实例是镜像第二个实例是见证服务器
我最初对我的主体数据库进行了完整备份和事务日志备份。通过保持相同的数据库名称将其恢复到第一个实例,恢复状态为无恢复
最后,我启动了镜像,并收到如下所示的两条错误消息。


我在服务器上有一个名为“mysite_db”的数据库,我在我的本地机器上创建了一个副本,它也是“mysite_db”。我想将数据库(从我的本地机器)附加到已经有这个数据库名称的服务器上。这意味着我必须更改本地数据库的名称(我想我还需要更改物理文件)。我不知道该怎么做。你能指导我吗?
我的目标是在服务器上加载 2 个数据库,例如:'mysite_db' 和 'myNewSite_db'
有人告诉我,如果攻击者可以访问未加密的 .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)
他还能访问数据吗?
我知道 SQL Server 不支持使用视图作为外键约束的参考,是否有原因(即与关系模型有关)是这种情况吗?好像会有用....