我们可以声明一个Identity
likeid_num
来id_num
增加唯一的数字。
CREATE TABLE new_employees
(
id_num int IDENTITY(1,1),
fname varchar (20),
minit char(1),
lname varchar(30)
)
Run Code Online (Sandbox Code Playgroud)
是否建议将其Identity
用作替代方案,Primary key
因为Identity
为每一行提供了唯一编号?
在测试从 SQL Server 2014 SP1 (12.0.4422.0) 到 SQL Server 2016 CTP 3.2 (13.0.900.73) 的升级时,我遵循推荐的更新过程并遇到了一个问题,即故障转移后数据库无法在旧的主数据库上启动到更新的辅助。我们的设置是一个主副本和一个辅助副本,我完成的步骤是:
升级辅助节点和故障转移使其成为主节点完全按预期工作。但是在升级以前的主副本后,我注意到其上的数据库在 SSMS 中列为Not Synchronizing / In Recovery。尝试访问它们也会生成错误消息:
数据库...无法访问。(对象浏览器)
通过我看到的 SQL Server 日志检查
无法打开数据库 '...' 版本 782。将数据库升级到最新版本。
查询master..sysdatabases表,确实是旧版本,升级过程中没有更新:
不幸的是,日志没有指出它为什么没有更新,并且可用性组仪表板只给出了一个通用警告,表明某些可用性数据库的数据同步状态不健康,没有任何原因。
我尝试使用 TSQL 分离数据库或将它们设置为离线以“踢”它进行更新,但由于它们是 SQL AG 的一部分,因此这些命令不起作用。
当数据库是 SQL AG 的一部分时,如何将数据库升级到最新版本?
这个问题基本上是这个问题的后续问题:
SQL Server 2016 的奇怪的性能问题
我们现在使用这个系统提高了效率。虽然自从我上一篇文章以来,另一个应用程序数据库被添加到这个 SQL Server 中。
这些是系统统计信息:
我们的系统现在存在重大的性能问题。非常高的 CPU 使用率和线程数:
等待活动监视器的统计数据(我知道它不是很可靠)
sp_blitzfirst 的结果:
sp_configure 的结果:
高级服务器设置(不幸的是只有德语)
MAXDOP …
标题几乎总结了它。我们的备份磁盘空间不足,需要从集合中删除旧备份。我似乎无法找到任何有关此的信息。
我希望married
在使用marital_status
列上的文本进行插入后触发此触发器,这是我目前所拥有的
ALTER TRIGGER [dbo].[marriage]
ON [dbo].[applicant_personal_info]
AFTER INSERT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
IF (SELECT [marital_status] FROM inserted) = 'married'
BEGIN
INSERT INTO [dbo].[applicant_marriage_info]([dom])
VALUES('abc')
END
END
Run Code Online (Sandbox Code Playgroud) 我一直在对压缩和存储 SQL Server 备份的不同方法进行一些测试(使用 SQL Server 2008 R2 企业版),我想知道最有效的压缩算法是在 SQL 之外长期存储这些备份内部压缩算法。
我不担心物理存储或磁带驱动器或任何东西,只是试图将我们的 3TB 数据和日志文件变成最小的单个文件。
那么,例如,是 .zip 还是 .7z?或者我的数据库中有太多变量无法准确估计什么是最有效的,而我只需要做一些测试?或者 SQL Server 的内部压缩是我能得到的最好的吗?
我正在尝试在 SQL Server 实例上运行此 SQL 脚本,以将测试数据库恢复到实时数据库的较新副本。
RESTORE FILELISTONLY
FROM disk = '\\staging_server\path\to\db_backup.bak'
-- Restore the files for
RESTORE DATABASE Test_DB
FROM disk = '\\staging_server\path\to\db_backup.bak'
WITH replace,
MOVE 'Test_DB' TO 'D:\R2_BIN\Test_DB.mdf',
MOVE 'Test_DB_log' TO 'D:\R2_BIN\Test_DB_log.ldf',
stats = 5
GO
Run Code Online (Sandbox Code Playgroud)
但是,在运行脚本时,我收到以下错误。
消息 3101,级别 16,状态 1,第 5 行
,无法获得独占访问权限,因为数据库正在使用中。
消息 3013,级别 16,状态 1,第 5 行
RESTORE DATABASE 异常终止。
有什么方法可以强制执行此操作,并终止完成它所需的任何连接?我试图关闭任何可能连接到数据库的应用程序,但我根本无法识别一些连接。我的用户名中有几个,但我只打开了一个 SQL Server Management Studio 实例。
无论如何,有没有办法杀死与特定数据库的所有连接?这个实例上运行着相当多的数据库,所以如果我能帮上忙,我不想只是关闭并重新启动实例。
如何在 SQL Server 2012 中将默认实例转换为命名实例?
我错误地选择了默认实例选项并安装了。现在我必须更改为命名实例。如何改变?
我试图获取存储过程返回的任何内容,以及列名及其类型。我可以用表来做到这一点,但我无法弄清楚存储过程。我尝试过,sp_columns
但只能使其适用于表格。
我也尝试过这样的事情,但我不确定我应该匹配什么。
SELECT *
FROM SYS.PROCEDURES (NOLOCK) AS AA
INNER JOIN SYS.SCHEMAS (NOLOCK) AS BB ON (AA.schema_id = BB.schema_id)
INNER JOIN SYS.COLUMNS (NOLOCK) AS CC ON (AA.object_id = CC.object_id)
Run Code Online (Sandbox Code Playgroud)
例如:
USER_ID VARCHAR(200)
Run Code Online (Sandbox Code Playgroud)
我只需要存储过程返回的列名及其数据类型。如果重要的话,SQL Server 版本是 2014。
有任何想法吗?谢谢。
sql-server ×8
backup ×2
compression ×1
cpu ×1
datatypes ×1
disk-space ×1
identity ×1
installation ×1
performance ×1
primary-key ×1
upgrade ×1
vmware ×1