标签: sql-server

识别消耗资源最多的登录\用户

有没有一种方法可以识别执行查询时实际消耗大量资源的顶级数据库用户?

sql-server-2008 sql-server resource-governor

2
推荐指数
1
解决办法
2399
查看次数

T-SQL CHANGETABLE 如何拥有带有文字表名称的参数

我可以将文字表名称传递到内置函数中CHANGETABLE。我想知道这是如何完成的以及是否可以在我自己的存储过程/内联函数中完成。

在此之上。如果可以先将其传递给文字常量,然后将其传递给函数,这样我就可以获得表 ID,而不必在两个地方指定表名称。

提前致谢。

sql-server t-sql

2
推荐指数
1
解决办法
325
查看次数

SSAS实时处理

我在SSAS中创建了一个多维数据集,如何从数据源提取实时数据到我的多维数据集?

我的意思是,如果发生任何数据修改(插入、更新、删除),SSAS 应该更新多维数据集。

sql-server ssas olap

2
推荐指数
1
解决办法
1400
查看次数

如何查找正在运行的作业的会话ID

尝试获取正在执行的作业的会话 ID

;with JobDetails as
(
select Job_Id = left(intr1,charindex(':',intr1)-1),
       Step = substring(intr1,charindex(':',intr1)+1,charindex(')',intr1)-charindex(':',intr1)-1),
       SessionId = spid
    from master.dbo.sysprocesses x 
    cross apply (select replace(x.program_name,'SQLAgent - TSQL JobStep (Job ','')) cs (intr1)
    where spid > 50 and x.program_name like 'SQLAgent - TSQL JobStep (Job %'
)
select * 
    from msdb.dbo.sysjobs j 
    inner join JobDetails jd on j.job_id = jd.Job_Id
Run Code Online (Sandbox Code Playgroud)

但它会引发以下错误

消息 8169,级别 16,状态 2,第 47 行 从字符串转换为 uniqueidentifier 时转换失败。

我尝试将其转换job_idvarbinary但没有产生任何结果

;with JobDetails as
(
select Job_Id = left(intr1,charindex(':',intr1)-1), …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql

2
推荐指数
1
解决办法
9658
查看次数

SQL Server 在哪里存储 SA 密码和 SQL Server 密码策略?

在Linux上,SQL Server在哪里存储“SQL Server密码策略”和SA用户的密码?我明白了,“密码”不安全。

错误:无法设置系统管理员密码:密码验证失败。该密码不符合 SQL Server 密码策略要求,因为它太短。密码必须至少为 8 个字符..

进而,

错误:无法设置系统管理员密码:密码验证失败。该密码不符合 SQL Server 密码策略要求,因为它不够复杂。密码长度必须至少为 8 个字符,并包含以下四组中的三组字符:大写字母、小写字母、基数 10 的数字和符号。

我猜该策略实际上已编译到数据库中?密码会存储在一个不起眼的位置吗?

sql-server linux database-internals sql-server-2017

2
推荐指数
1
解决办法
8680
查看次数

按不间断日期对行进行分组

我想以这样的方式返回数据,即如果代码具有连续的活动日期和结束日期,则数据应给出最小活动日期和最大结束日期,但如果代码已停止,则应显示两个日期

例如桌子

+----+------+---------------+------------+
|Code| Decri|   Active Date |End Date    | 
+----+------+---------------+------------+
|1000| ABC  | 1/1/2011      | 30/6/2011  |
|1000| ABC  | 1/7/2011      | 30/6/2012  |
|1000| ABC  | 1/7/2012      | 30/6/2013  |
|1001| ABC  | 1/7/2013      | 30/6/2014  |
|1001| ABC  |12/20/2015     |12/20/2017  |
|1003| ABC  | 1/1/2011      |30/6/2011   |
|1003| ABC  | 1/7/2012      |30/6/2013   |
|1003| ABC  | 1/7/2014      |30/6/2015   |
|1003| ABC  | 1/7/2015      |12/20/2017  |
+----+------+---------------+------------+
Run Code Online (Sandbox Code Playgroud)

欲望输出

+----+------+---------------+------------+
|Code| Decri|   Active Date |End Date    | 
+----+------+---------------+------------+
|1000| …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql sql-server-2012 gaps-and-islands

2
推荐指数
1
解决办法
2995
查看次数

当 LDF 文件很大时,fn_dblog 不显示记录

我需要在事务日志文件中查找一些特定事务,因此我使用 fn_dblog 函数。但该函数只返回几行。同时,我的数据库的 LDF 文件至少有几 GB。

我知道 fn_dblog 函数仅搜索日志的活动部分:

  • 但是,这是什么意思?

  • 事务日志的一部分何时变得不活动?

  • 以及如何搜索不活动的部分?

sql-server transaction-log

2
推荐指数
1
解决办法
1365
查看次数

多种条件下的 LEFT OUTER JOIN

有没有办法按顺序链接两个表?

表 A(实际):

EX  STATUS  DLV     Actual FEE    Expected Fee
N    ACT    MAIL    1.25
N    ACT    EMAIL   1.25
N    ACT    PICKUP  0
N    NON    MAIL    0
N    NON    EMAIL   1.25
N    NON    PICKUP  0
Y                   0
Run Code Online (Sandbox Code Playgroud)

表 B(预期):

EX  STATUS  DLV     Expected FEE
N    ACT    MAIL    1.25
N    ACT    EMAIL   0
N    ACT    PICKUP  0
N    NON    MAIL    1.25
N    NON    EMAIL   0
N    NON    PICKUP  0
Y                   0
Run Code Online (Sandbox Code Playgroud)

表 A(预期结果):

EX  STATUS  DLV     Actual FEE    Expected Fee
N    ACT …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012

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

PIVOT、Row_Number() 返回多行

我试图将电子邮件列表旋转到一行上,但由于某种原因,我的主要电子邮件地址得到了自己的一行,所以我最终每个联系人有两行。

CREATE TABLE #tmp (
ID VARCHAR(20)
, EMAIL VARCHAR(50)
, isPrimary VARCHAR(1)
)

INSERT INTO #tmp (ID, EMAIL, isPrimary) VALUES ('B4100358183Q!ZH.ETES', 'ABoyd@Energize.com', '1')
INSERT INTO #tmp (ID, EMAIL, isPrimary) VALUES ('B4100358183Q!ZH.ETES', 'BSykes@Energize.com', '0')
INSERT INTO #tmp (ID, EMAIL, isPrimary) VALUES ('B4100358183Q!ZH.ETES', 'TC6@test.com', '0')
Run Code Online (Sandbox Code Playgroud)

我如何修改下面的脚本以仅返回包含所有 3 个电子邮件地址的一行而不是两行?

SELECT ID, [1], [2], [3]
FROM (
  Select ID, EMAIL, isPrimary 
  , ROW_NUMBER() OVER (PARTITION BY ID ORDER BY isPrimary desc) AS rn
  from #tmp
) eml
PIVOT (
  min(EMAIL)
  FOR rn IN …
Run Code Online (Sandbox Code Playgroud)

sql-server pivot

2
推荐指数
1
解决办法
6449
查看次数

如何仅在良好的情况下恢复 .bak

我正在使用 Tsql 脚本来恢复多个数据库。

RESTORE DATABASE XXX_M
   FROM DISK = 'C:\XXX.bak'
   WITH FILE = 1, replace
GO
Run Code Online (Sandbox Code Playgroud)

有时 .bak 文件已损坏(不是数据损坏)。

我想知道是否有一种方法可以检查文件是否未损坏,然后进行恢复,否则不会。我尝试在恢复验证后使用@@rowcount,但效果不好。

RESTORE VERIFYONLY 
   FROM DISK = 'C:\xxx.bak'
if @@ROWCOUNT !=0
print 'false'
else 
print 'good'
Run Code Online (Sandbox Code Playgroud)

还有其他想法吗?

谢谢。

sql-server-2008 sql-server t-sql sql-server-2008-r2 sql-server-2014

2
推荐指数
1
解决办法
417
查看次数