我的一个客户在 SQL Server 2008 Express 上达到了 4GB 的数据库限制。作为测试,我在另一台机器上安装了 R2 版本并恢复了数据库的备份。
我想升级实际的服务器本身,尽管我担心除了损害系统稳定性之外还有什么陷阱/后果。
这是因为,这台机器上正在运行其他关键应用程序(包括我不完全了解的 ERP),这需要致电另一家公司重新安装/设置。
我给了客户 3 个选项:
我还考虑过使用 clonzilla (ghost) 等克隆整台计算机,但由于我是远程支持,这需要我旅行约 500 公里。
此外,这是一个严重的问题,因为他们无法向该数据库添加新记录。
是否可以创建一个存储过程,在与存储过程本身所在的数据库不同的数据库中创建表触发器 (DDL) 。数据库位于同一服务器实例上。如果是,那么如何?
例如,这不起作用:
create PROCEDURE [dbo].[CreateTriggrer]
@db varchar(60)
AS
BEGIN
SET NOCOUNT ON;
declare @statement nvarchar(max) = N'CREATE TRIGGER [dbo].[TestTrigger]
ON [$database$].[dbo].[TestTable]
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
PRINT ''test''
END'
set @statement = REPLACE(@statement,'$database$',@db)
EXEC dbo.sp_executesql @statement = @statement
END
Run Code Online (Sandbox Code Playgroud)
当这样调用时:
EXEC [dbo].[CreateTriggrer] @db = N'TestDatabase'
Run Code Online (Sandbox Code Playgroud)
它返回此错误:
消息 2108,级别 15,状态 1,过程 TestTrigger,第 6 行
无法在“TestDatabase.dbo.TestTable”上创建触发器,因为目标不在当前数据库中。
这是公平的。有没有办法实现我想要的?
我们有相当大的表(500 密耳行),我们期望频繁插入。桌子有大约。每个索引 2 个。问题是我们担心,当索引重新计算时,整个表被锁定,所有查询都会超时(在重新计算期间)。
有没有办法尽量减少重新计算索引的发生?例如,让节点在创建时变大,这样更多添加的指针将适合索引,而无需重新平衡索引?
我们有 SQL Server 2008 R2。
为什么一个有效而另一个无效?
SELECT REPLACE(N'IA?I' ,N'?','x') -- doesn't match (returns 'IA?I')
SELECT REPLACE('IA?I' ,'?','x') -- works (returns 'IAxI')
Run Code Online (Sandbox Code Playgroud)
我的猜测是在第二个示例中 SQL Server 会看到 '?' 作为 2 个字符 (0x19 02) 并且不做一些破坏多字节匹配的整理优化。
应该怎么做才能使多字节示例工作?
我试图释放数据库中的一些空间,首先是通过换出和归档分区。数据库很大,我想开始释放驱动器上的一些空间,但我不想完全缩小数据库,因为这需要数周时间。
是否可以将 SQL Server DB 缩小 10GB?
谢谢大家!
厘米
这是我在 SQL Server 2008 R2 中查找主键、外键的查询:
select *
from information_schema.table_constraints
where constraint_type = 'PRIMARY KEY'
Run Code Online (Sandbox Code Playgroud)
知道我需要在我的数据库中选择没有主键表。
谢谢
如何遍历 SQL Server 表中的所有行并编辑列?你知道的:
creatie每次一分钟都必须对该列进行编辑。所以第一个必须是 15:00:00,第二个 15:01:00,第三个 15:02:00 等等。我使用了下面的查询,但最大 ID 是 24697...所以循环很长。
declare @var datetime = '2015-10-19 0:0:0';
declare @counter int = 1;
declare @max int = (select max(id) from topic);
while (@counter <= @max) begin
update Topic set Creatie = Creatie + @var where id = @counter;
set @counter += 1;
set @var += '0-0-0 0:1:0'
end;
Run Code Online (Sandbox Code Playgroud)
因为我每次都这样做@var += '0-0-0 0:1:0',我不知道 24697 次后的结果是什么(如果它有效)。
这是前 25 …
有没有简单的方法来获取从 SQL 语句返回的列名?
如:
SELECT *
FROM ATable
FULL OUTER JOIN BTable b ON a.SOME_KEY = b.SOME_KEY
FULL OUTER JOIN CTable c ON b.SOME_ID = c.SOME_ID
FULL OUTER JOIN DTable d ON a.SOME_OTHER_ID = d.SOME_OTHER_ID
WHERE a.SOME_KEY = @key AND c.SOME_SERIAL_NR = @serialnumber
Run Code Online (Sandbox Code Playgroud)
我似乎无法得到
select column_name
from information_schema.columns
where table_name = 'table'
Run Code Online (Sandbox Code Playgroud)
在我当前的环境中工作
我们在 Windows Server 群集上安装了 SQL Server 2008 R2 Standard。我想对数据库上的所有索引进行碎片整理。
禁用所有连接并允许重建索引的最佳方法是什么?
我可能无法关闭 Web 服务器。我怀疑单用户模式是否可行,因为我的连接可能会被踢出。我也怀疑受限用户模式会在应用程序以 dbo 身份登录时起作用。
想到的一种解决方案是禁用 SQL Server 端口,但不太确定。有什么建议?
编辑:我想将数据库设置为 single_user\restricted_user 并通过 DAC 连接并从命令行运行碎片整理作业。你认为这会奏效吗?
clustering sql-server-2008-r2 fragmentation standard-edition
如果我在 SQL Server 2012 SP1 中应用累积更新 3,在应用 CU 3 之前是否还需要执行累积更新 1 和 2?而且,您如何知道 SQL Server 中已经应用了哪些 CU 或修补程序?