标签: sql-server-2012

如何从以下查询中获取分层值?

我有一个名为的表Category,其中有一列名为CategoryID. 同一个表中有一个引用列,称为fParentCategoryID

我需要将所有类别 ID 及其子类别 ID 以逗号分隔。例如 -如果 10 的父类别 ID 为 1,如果 20 的父类别 ID 为 10,那么当我打印类别 ID 20 时,我需要以逗号分隔值打印 1 和 10 作为其父项。

我尝试了以下查询,但我得到NULLParChild列。请帮忙。

;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)

cte t-sql subquery sql-server-2012

8
推荐指数
1
解决办法
1074
查看次数

从字符串转换日期和/或时间时转换失败

我有一个问题,因为我一直在使用这个查询没有问题......直到现在:

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)

sql-server sql-server-2012

8
推荐指数
2
解决办法
20万
查看次数

SQL Server 将变量传递给存储过程中的字符串

我正在尝试将自定义字符串与一个 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)

sql-server stored-procedures parameter sql-server-2012

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

如何命名表变量函数唯一约束?

我正在重命名一些独特的约束以匹配我们的数据库对象命名约定。奇怪的是,有几个多行表值函数返回的表具有唯一约束,如下所示:

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

8
推荐指数
1
解决办法
1216
查看次数

更新 WHERE 子句以检查值是否不在单独的表中

我有一个使用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)

sql-server t-sql sql-server-2012 where

8
推荐指数
2
解决办法
1168
查看次数

更新大小为 5k 的行时出现 8k 行溢出错误

我正在尝试将一行大小为 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)

复制

表自创建以来没有改变。没有看到它应该失败的任何原因。想法?

sql-server sql-server-2012 update

8
推荐指数
2
解决办法
2128
查看次数

如果 NT SERVICE\MSSQLSERVER 帐户较早地在 LocalSystem 上运行,如何在该帐户上运行 SQL 服务

最近只是为了实验目的,我将服务器设置中的默认 (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 permissions configuration sql-server-2012

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

收缩 SQL Server 事务日志

我目前不得不处理失控的 SQL Server 事务日志。免责声明:我不是 dba,这不是我的专业领域,所以请耐心等待。

目前,我有一个500MB 的数据库的115GB事务日志文件,该文件(显然)在一段时间内管理不善,无法进入这种状态。

首要任务是在我们用完之前回收这个文件占用的磁盘空间!有人告诉我增加驱动器的大小不是一种选择,即使是暂时的,而且根据过去的增长,我们需要尽快采取行动。

据我了解,最好的方法是将数据库保持在完全恢复模式,但定期备份日志文件,在一段时间内对其进行监控并调整初始大小和增量以适应。一切都好。

鉴于我们在午夜定期进行完整的数据库备份,我是否可以安全地将数据库暂时置于简单恢复模式(在这些备份之一运行后),缩小日志文件以回收(几乎所有)空间和然后使用上述备份策略将其放回完全恢复?

我的想法是,如果这个时候发生了什么事情,我们可以简单地恢复完整备份而不使用日志。

更新

回复一些答案和评论的一些额外细节:

  • 我们确实希望保留进行时间点还原的能力,因此数据库应保持在完全恢复模式。

  • t-log 文件变得如此大的原因是它从未被备份过。验证为 log_reuse_wait_desc 返回“LOG_BACKUP”。

sql-server backup restore sql-server-2012

8
推荐指数
1
解决办法
1852
查看次数

SQL Server 访问问题

我正在尝试使用来自不同登陆服务器的 SSMS 连接 3 个 SQL 服务器。问题是我可以连接 1 个服务器但无法连接其他 2 个。我得到的错误如下:

在此处输入图片说明

已成功与服务器建立连接,但随后在登录过程中出现错误。(提供者:SSL 提供者,错误:0 - 远程主机强行关闭了现有连接。)

我无法弄清楚其他 2 台服务器出了什么问题,需要您的帮助。

登陆服务器详情:

  1. Windows server 2008 R2 Ent版
  2. SSMS 2012 SP1

SQL 服务器详细信息:

  1. SQL Server 2012 -- 能够连接
  2. SQL Server 2012 -- 无法连接
  3. SQL Server 2005 -- 无法连接

我能够从我的登陆服务器 ping 和 telnet 所有 3 个服务器。另外,尝试了 2 台服务器的 SQL 身份验证,但我无法连接但它不起作用。禁用 TCP 烟囱,不起作用。相同的 3 个连接在我的其他登陆服务器上运行良好。所以不确定这个有什么问题。请帮我解决这个问题。

sql-server sql-server-2012 connectivity

8
推荐指数
1
解决办法
4万
查看次数

我应该禁用超线程吗

背景我最近一直在研究一些相当高的 CXPacket 等待时间,这让我使用 SQL Sentry 非常密切地监视处理器活动。

结果我注意到的一件事是我们在上下文切换中出现了巨大的峰值下面是一个 5 分钟的示例,但这种模式在一天中非常普遍。

语境

正如你所看到的,它非常有规律地飙升。现在我对此的理解将使我相信这将是 CPU 压力的结果。然而在那段时间里几乎没有超过 60%。

处理器

经过一些研究,这让我相信这是超线程的结果。我知道我之前已经阅读过超线程的一些危险。然而,那是很久以前写的。

使长话短说。超线程可能是上下文切换峰值的罪魁祸首吗?上下文切换是否可能对我的并行查询产生负面影响?我应该在我的环境中禁用超线程吗?

更新虽然我的环境中正在发生这种特定的事情,但其核心问题更为普遍。高级上下文切换对并行查询的影响有多大?超线程会导致此类问题吗?

最终,我在互联网上发现的大部分内容都表明超线程和 SQL Server 不是好朋友,但大多数信息都非常过时。

我的系统有很多配置问题,所以我将在这里解决这些问题,以便可以排除它们。我们在操作系统和生物级别都有性能的电源设置。我们的 Maxdop 设置为 8,并行的成本阈值为 25。我们有 32 个逻辑内核和 16 个物理内核。这也是大部分数据仓库加载场景。

sql-server sql-server-2012 windows-server

8
推荐指数
1
解决办法
3967
查看次数