我们确实有几台服务器,一台专用于没有 SQL 的网站,另一台服务器专用于 SQL。
现在运行 SQL 的服务器非常强大,但有时服务器 CPU 只是达到 100%。
这是几个屏幕截图,显示了正在发生的事情。
CPU 已满:
CPU运行正常:
如您所见,服务器非常强大。
补充说明。
有没有人能够对可能发生的事情有所了解,或者指导我完成一些检查。
干杯
更新:以下两个屏幕截图是@S4V1N 建议我运行的两个查询的结果。
使用 SQL Server 生成自定义自动生成序列的最佳方法是什么?
这是我的要求:
我的应用程序托管在 10 台未互连的独立服务器上。
每个实例都应该生成一个序列号,所有这些数据将使用 SQL Server 的合并复制合并到所有数据库中。
生成的序列在所有服务器中应该是唯一的。
为了实现这一点,我创建了一个函数来为序列号添加服务器 id 前缀,并将其用作计算列。但是当我添加数据时,出现以下异常:
“已超出最大存储过程、函数、触发器或视图嵌套级别(限制为 32)。”
这是我的表和函数。请提出更好的方法。
create table Customers
(
CID int identity not null primary key,
CustomerName varchar(50)
)
ALTER function [dbo].[NextCustomerNumber]()
returns bigint
as
begin
declare @lastval bigint
declare @serverId int
declare @newval bigint
set @lastval = (select max(CustomerNumber) from Customers)
set @serverId= 1 -- Server ID pulls from some settings
set @newval=CONVERT(bigint, (CAST(@serverId as varchar(2))+CONVERT( varchar(10),(RIGHT(@lastval,(LEN(@lastval)-LEN(@serverId)))+1))))
return @newval
end
Alter table Customers add CustomerNumber …Run Code Online (Sandbox Code Playgroud) 我创建了一个导入 600,000 行 Excel 工作表的表格。我将运行的大多数查询都将使用C_CustomerID,它们将如下例所示:
select * from testtable where C_CustomerID = 12345678
Run Code Online (Sandbox Code Playgroud)
表定义为:
CREATE TABLE [dbo].[testtable](
[id_card] [int] IDENTITY(1,1) NOT NULL,
[C_CustomerID] [int] NOT NULL,
[C_AccountID] [nvarchar](255) NULL,
[C_ProductID] [varchar](20) NULL,
.......... more columns here ...
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
我创建了一个索引:
CREATE NONCLUSTERED INDEX [inx_profitability] ON [dbo].[testtable]
(
[C_CustomerID] ASC
)
Run Code Online (Sandbox Code Playgroud)
稍后我只会从 Excel 工作表导入更多记录。每 6 个月将导出约 500,000 条新记录。
一旦表变大,我可以做些什么来提高未来的性能?
我正在运行 SQL Server 2012 和 Microsoft SQL Server Management Studio 11.0.3128.0。
我正在使用 Visual Studio 创建一个 VC# 应用程序。启动时,它会打开一个 MDF 文件(SQL Server Express 数据库)。
当我执行
BACKUP DATABASE db.mdf TO DISK=backup.mdf
Run Code Online (Sandbox Code Playgroud)
我创建了 backup.mdf。
然后我执行以下操作:
我收到错误“用户‘PC\User’登录失败”
我该如何解决这个问题?
在 MSSQL 2008R2 上,我在不同的服务器上有两个实例,我需要同步所有登录的密码更改。我认为我可以创建一个存储过程,其中具有 securityadmin 服务器角色的用户(模拟)更改密码。
Obs:CHANGE_PASSWORD 是具有 securityadmin 服务器角色的用户。
ALTER PROCEDURE SPU_CAMBIO_PASSWORD
(
@USER VARCHAR(50),
@PASSWORD VARCHAR(100)
)
WITH EXECUTE AS 'CHANGE_PASSWORD'
AS
DECLARE @STATEMENT VARCHAR(200)
SET @STATEMENT= 'ALTER LOGIN '+ @USER+ ' WITH PASSWORD = '''+@PASSWORD+''', CHECK_POLICY =OFF'
EXEC(@STATEMENT)
GO
Run Code Online (Sandbox Code Playgroud)
错误:无法作为服务器主体执行,因为主体“CAMBIO_PASSWORD”不存在,无法模拟此类主体,或者您没有权限。
sql-server permissions t-sql sql-server-2008-r2 impersonation
嗨,我试图从我的数据库中截断一些表,但它们与外键约束相关,所以每次我尝试 SQL Server 时都会抛出这样的错误:
无法截断表“Table”,因为它正被 FOREIGN KEY 约束引用
我不想删除表或删除它们。
一位朋友告诉了这个案例的Truncate Cascade,但我没有找到任何相关信息,其他用户也告诉我试试这个;我确实尝试过,但仍然没有截断我的表。
我还阅读了有关外键 DROP 和 RE-CREATE 的 SCRIPT 以与 TRUNCATE 一起使用。
脚本应该会影响我的数据库,或者至少我是这么认为的。但是在运行它之后,我无法截断我的表并且它抛出了同样的错误。我正在使用 SQL Server 2008 R2,并使用该版本的 SSMS 运行我的查询。
如何从链接服务器获取多个表的记录计数。
我有两台名为生产和本地的服务器。我需要编写查询来获得这张图片中提到的结果。
我试过
SELECT 'TableA' AS Tables, COUNT(*) AS 'QA' FROM [Database].[schema].[tablename]
UNION
SELECT 'TableB' AS Tables, COUNT(*) AS 'QA' FROM [Database].[schema].[tablename]
Run Code Online (Sandbox Code Playgroud)
如何显示链接服务器的记录数?
我的问题与 SQL Server 的最佳实践有关。我需要整理一份文件,列出我们的各种数据库,并且我们对这些数据库的备份是有效的并且已经过测试,我们知道它们会在灾难恢复情况下正确恢复。我正在使用 Ola H. 维护解决方案,该解决方案使用 RESTORE VERIFY 选项备份数据库,并提供“成功”消息以指示备份集有效。这是否足以让我们充满信心,还是我们仍然应该手动将这些备份恢复到测试服务器并运行测试?
我在可以创建表和存储过程的数据库中有一个用户帐户。
我想确认此用户帐户是否可以创建模式 -无需先尝试。(我是金融的一部分,而不是 IT。)
如果我可以创建模式,那么我会请求 IT 许可继续这样做。
如果我不能,那么我将继续等待 IT 在我前段时间提出的服务台请求上执行此操作(叹气)。
有没有我可以在 SSMS 中运行的命令,它可以在不实际创建新模式的情况下告诉我这一点?
我还截取了该用户权限的几个屏幕截图 - 也许他们会有答案?
编辑:
运行下面 SQLServing 建议的 SQL 后,我得到了这个结果:
UserName is_disabled principal_type_desc class_desc object_name permission_name permission_state_desc
DWReports 0 SQL_USER DATABASE NULL CONNECT GRANT
DWReports 0 SQL_USER OBJECT_OR_COLUMN GetSystemSQLAgentJobList EXECUTE GRANT
Run Code Online (Sandbox Code Playgroud) 我需要有关 SQL 查询的帮助。用一些例子可以更好地解释我的问题。
假设我从两个表 ORDR 和 RDRO 中提取了这样的数据。第一个表 (ORDR) 包含有关订单的所有数据,但项目除外。第二个表 (RDRO) 包含订单的所有项目信息。可以使用 [docNum] 连接两个表。
T0.docNum | T1.itemCode
123 EDS100
123 DDS200
123 DDS500
124 LLS220
124 LDS254
125 FGD450
125 LDS552
125 DDS200
125 EDD200
Run Code Online (Sandbox Code Playgroud)
当 1 个项目编号符合条件时,我想返回所有行。
假设在这种情况下,当一行等于 DDS200 时,我想要订单的所有行会给出以下结果:
T0.docNum | T1.itemCode
123 EDS100
123 DDS200 -- match
123 DDS500
125 FGD450
125 LDS552
125 DDS200 -- match
125 EDD200
Run Code Online (Sandbox Code Playgroud)
我确定这是微不足道的,我尝试了以下方法:
SELECT T0.docNum, T1.itemCode
FROM ordr T0 INNER JOIN rdro T1 ON T0.docNum = T1.docNum
WHERE T1.itemCode like …Run Code Online (Sandbox Code Playgroud) sql-server ×10
backup ×1
identity ×1
index-tuning ×1
performance ×1
permissions ×1
replication ×1
sequence ×1
ssms ×1
t-sql ×1
truncate ×1