我有一个名为的表Category,其中有一列名为CategoryID. 同一个表中有一个引用列,称为fParentCategoryID。
我需要将所有类别 ID 及其子类别 ID 以逗号分隔。例如 -如果 10 的父类别 ID 为 1,如果 20 的父类别 ID 为 10,那么当我打印类别 ID 20 时,我需要以逗号分隔值打印 1 和 10 作为其父项。
我尝试了以下查询,但我得到NULL了ParChild列。请帮忙。
;WITH
cteReports
AS
(
SELECT c.CategoryID,
c.fParentCategoryID,
[level] = 1,
ParChild=cast(CAST(c.fParentCategoryID AS VARCHAR(200)) + ',' + CAST(c.CategoryID AS VARCHAR(200)) AS VARCHAR(MAX))
FROM retail.Category c
WHERE c.fParentCategoryID is NULL
UNION ALL
SELECT c.CategoryID,
c.fParentCategoryID,
[level] + 1,
ParChild = ParChild + ',' + …Run Code Online (Sandbox Code Playgroud) 我有一个问题,因为我一直在使用这个查询没有问题......直到现在:
UPDATE T1
SET ORDINAL = DATEDIFF(DAY, T2.Opening_Date, T1.Date)
FROM FactTransactions T1
INNER JOIN DimStore T2 ON T1.cod_store = T2.cod_storeKey
Run Code Online (Sandbox Code Playgroud)
但现在它给了我一个错误:
从字符串转换日期和/或时间时转换失败
我不知道是怎么回事。以下是列:
Ordinal(numeric,null)
Opening_date(varchar, not null)
Date(varchar, not null)
cod_store(int,not null)
cod_storekey(PK,int, not null)
Run Code Online (Sandbox Code Playgroud) 我正在尝试将自定义字符串与一个 int 变量连接起来。Investigation is pending for ['+ @investigationidout +']. 当我将鼠标指针悬停在第一个+标志上时,它说:
'+' 附近的语法不正确
这可能吗 ?
我需要看到类似的东西:
1234 的调查正在等待中
我的查询:
EXEC sp_wf_create_notification
@processid,
@vactivityid,
@vstepid,
1,
@vidColumn,
@vidColumnTable,
@investigationidout,
@owner,
'Pending Investigation',
'Investigation is pending for ['+ @investigationidout +'] '
@nextstepurl,
@vstatus OUTPUT,
@verror OUTPUT
Run Code Online (Sandbox Code Playgroud) 我正在重命名一些独特的约束以匹配我们的数据库对象命名约定。奇怪的是,有几个多行表值函数返回的表具有唯一约束,如下所示:
CREATE FUNCTION [dbo].[fn_name] (...)
RETURNS @Result
TABLE
(
ID BIGINT PRIMARY KEY,
...
RowNum BIGINT UNIQUE
)
BEGIN
...
RETURN
END
GO
Run Code Online (Sandbox Code Playgroud)
我尝试这样命名它,但不起作用:
CREATE FUNCTION [dbo].[fn_name] (...)
RETURNS @Result
TABLE
(
ID BIGINT PRIMARY KEY,
...
RowNum BIGINT
,CONSTRAINT UC_fn_name_RowNum UNIQUE([RowNum])
)
BEGIN
...
RETURN
END
GO
Run Code Online (Sandbox Code Playgroud)
当它是表变量函数定义的一部分时,是否可以设置唯一约束的名称?
t-sql sql-server-2012 set-returning-functions unique-constraint table-variable
我有一个使用WHERE子句的查询,我碰巧在这个表的许多查询中使用了完全相同的WHERE子句(等)。
查询是:
SELECT
DATENAME(DW, [AtDateTime]) AS [Day of Week]
,COUNT(*) AS [Number of Searches]
,CAST(CAST(COUNT(*) AS DECIMAL(10, 2))
/ COUNT(DISTINCT CONVERT(DATE, [AtDateTime])) AS DECIMAL(10, 2))
AS [Average Searches per Day]
,SUM(CASE WHEN [NumFound] = 0 THEN 1 ELSE 0 END)
AS [Number of Searches with no Results]
,CAST(CAST(SUM(CASE WHEN [NumFound] = 0 THEN 1 ELSE 0 END)
AS DECIMAL(10, 2)) / COUNT(*) AS DECIMAL(10, 4))
AS [Percent of Searches with no Results] …Run Code Online (Sandbox Code Playgroud) 我正在尝试将一行大小为 5k 的目标表更新为一行大小为 5k 的目标表。
由于它是一行,因此很容易知道行的实际大小:
select *
from sys.dm_db_index_physical_stats(DB_ID('RODS_HSD_ES'),
OBJECT_ID(N'TBL_BM_HSD_SUBJECT_AN_148_REPRO'), NULL, NULL, 'DETAILED')
Run Code Online (Sandbox Code Playgroud)
表自创建以来没有改变。没有看到它应该失败的任何原因。想法?
最近只是为了实验目的,我将服务器设置中的默认 (C:...) 数据\日志文件路径重新定位到新位置 (G:\DBA)。
然后我将以前存在的 db 的 data\log 文件移动到新位置 (G:\DBA) 并重新启动 SQL 服务。从那时起,每当我创建数据库时,它都会按预期工作,即在新位置创建数据\日志文件(很酷...)。
但问题是,我看到我以前存在的所有数据库都处于RecoveryPending状态,也出现了类似Access denied的错误。
认为运行 SQL 的服务帐户 (NT SERVICE\MSSQLSERVER) 无法访问新位置 (G:\DBA),我将登录帐户更改为计算机管理控制台中 SQL 服务的本地系统。现在我看到所有的数据库都很好。

但是,我想在 NT SERVICE\MSSQLSERVER(默认实例)服务帐户上运行我的 sql 服务。我尝试通过为 NT SERVICE\MSSQLSERVER 提供对 G:\DBA\ 的完全访问权限,但没有用。如果我想在 NT SERVICE\MSSQLSERVER 服务帐户上运行我的 SQL 服务,请帮助我我必须做什么。我是这个领域的初学者。请帮帮我。
提前致谢。. .
我目前不得不处理失控的 SQL Server 事务日志。免责声明:我不是 dba,这不是我的专业领域,所以请耐心等待。
目前,我有一个500MB 的数据库的115GB事务日志文件,该文件(显然)在一段时间内管理不善,无法进入这种状态。
首要任务是在我们用完之前回收这个文件占用的磁盘空间!有人告诉我增加驱动器的大小不是一种选择,即使是暂时的,而且根据过去的增长,我们需要尽快采取行动。
据我了解,最好的方法是将数据库保持在完全恢复模式,但定期备份日志文件,在一段时间内对其进行监控并调整初始大小和增量以适应。一切都好。
鉴于我们在午夜定期进行完整的数据库备份,我是否可以安全地将数据库暂时置于简单恢复模式(在这些备份之一运行后),缩小日志文件以回收(几乎所有)空间和然后使用上述备份策略将其放回完全恢复?
我的想法是,如果这个时候发生了什么事情,我们可以简单地恢复完整备份而不使用日志。
更新
回复一些答案和评论的一些额外细节:
我们确实希望保留进行时间点还原的能力,因此数据库应保持在完全恢复模式。
t-log 文件变得如此大的原因是它从未被备份过。验证为 log_reuse_wait_desc 返回“LOG_BACKUP”。
我正在尝试使用来自不同登陆服务器的 SSMS 连接 3 个 SQL 服务器。问题是我可以连接 1 个服务器但无法连接其他 2 个。我得到的错误如下:
已成功与服务器建立连接,但随后在登录过程中出现错误。(提供者:SSL 提供者,错误:0 - 远程主机强行关闭了现有连接。)
我无法弄清楚其他 2 台服务器出了什么问题,需要您的帮助。
登陆服务器详情:
SQL 服务器详细信息:
我能够从我的登陆服务器 ping 和 telnet 所有 3 个服务器。另外,尝试了 2 台服务器的 SQL 身份验证,但我无法连接但它不起作用。禁用 TCP 烟囱,不起作用。相同的 3 个连接在我的其他登陆服务器上运行良好。所以不确定这个有什么问题。请帮我解决这个问题。
背景我最近一直在研究一些相当高的 CXPacket 等待时间,这让我使用 SQL Sentry 非常密切地监视处理器活动。
结果我注意到的一件事是我们在上下文切换中出现了巨大的峰值。下面是一个 5 分钟的示例,但这种模式在一天中非常普遍。
正如你所看到的,它非常有规律地飙升。现在我对此的理解将使我相信这将是 CPU 压力的结果。然而在那段时间里几乎没有超过 60%。
经过一些研究,这让我相信这是超线程的结果。我知道我之前已经阅读过超线程的一些危险。然而,那是很久以前写的。
使长话短说。超线程可能是上下文切换峰值的罪魁祸首吗?上下文切换是否可能对我的并行查询产生负面影响?我应该在我的环境中禁用超线程吗?
更新虽然我的环境中正在发生这种特定的事情,但其核心问题更为普遍。高级上下文切换对并行查询的影响有多大?超线程会导致此类问题吗?
最终,我在互联网上发现的大部分内容都表明超线程和 SQL Server 不是好朋友,但大多数信息都非常过时。
我的系统有很多配置问题,所以我将在这里解决这些问题,以便可以排除它们。我们在操作系统和生物级别都有性能的电源设置。我们的 Maxdop 设置为 8,并行的成本阈值为 25。我们有 32 个逻辑内核和 16 个物理内核。这也是大部分数据仓库加载场景。
sql-server-2012 ×10
sql-server ×8
t-sql ×3
backup ×1
connectivity ×1
cte ×1
parameter ×1
permissions ×1
restore ×1
subquery ×1
update ×1
where ×1