标签: sql-server

SQL Server 替换未返回预期结果

下面的代码不应该返回0吗?

SELECT REPLACE(ISNULL('',0),'',0)
Run Code Online (Sandbox Code Playgroud)

这也不返回0....

SELECT REPLACE('','',0)
Run Code Online (Sandbox Code Playgroud)

我在包含数值的表中有一个 nvarchar 字段,但有时为空(不为空)。

我有一个查询,检查该字段是否<另一个字段中的数字,但我得到

“将数据类型 nvarchar 转换为数字时出错。”

如果该字段为空,则会出错。我试图在查询执行期间将空白值 ('') 转换为零,这样我就不会收到转换错误,但我刚刚意识到

SELECT REPLACE('','',0)
Run Code Online (Sandbox Code Playgroud)

不会将空白字段转换为 0。

我尝试使用下面的代码来尝试避免转换错误,但是当阈值字段为空时它没有像我预期的那样评估为 0:

SELECT CAST(REPLACE(ISNULL(Threshold,0),'',0) as decimal(4,2))
Run Code Online (Sandbox Code Playgroud)

当阈值字段为空时,如何让代码评估为 0。

我猜我可以写一个 if 或 case 语句来跳过空白 ('') 值阈值,但我认为必须有一种方法可以全部内联,就像我试图用上面的代码做的那样.

sql-server

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

当我已经在运行 SQL Server 2014 时,我应该安装 SQL Server 2012 SP3 吗?

我们已经运行 SQL Server 2014 将近一年了,但 SQL Server 2012 SP3 继续出现在 Windows 更新列表中(作为可选安装)。从以前的版本安装服务包似乎很荒谬,所以我只是忽略了它。

但是,我们最近开始遇到断言失败(有关更多信息,请参见下文),我们正在尝试解决的一件事是确保服务器已完全修补。我们安装了 2014 年最新的累积更新,但它没有解决问题或使 SP3 项目从 Windows 更新中消失。SP3 仍然不在我的关注范围内,但后来我发现了一篇Microsoft 产品支持服务博客文章,其中说使用最佳实践安全分析器来尝试解决断言失败,当我这样做时,它提出了一个警告,我们没有应用那个SP3。

所以现在我正在考虑应用该安装,但我担心我会不小心降级我的服务器 - 不是我们会完全回到 2012 年,而是一些累积更新可能会被还原,或者其他一些奇怪的行为。

不是我们收到的确切断言失败,但它很接近。我找不到似乎描述我们遇到的实际问题的知识库文章 - 上一句中链接的知识库与TOP N我们的有关与使用 的过程有关OFFSET X ROWS FETCH NEXT Y ROWS ONLY。实际的断言失败是SQL Server Assertion: File: <op_ppqte.cpp>, line=12258)

sql-server installation sql-server-2012 service-pack sql-server-2014

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

修剪 MS SQL Server 中 xml 列中的值

我有一个带有 XML 列的数据库。我正在尝试更新(修剪) xml 列的 xml 值。我在 Windows、SQL Server 2008 Express 上运行。

我没有找到任何直接在 Xquery 中修剪的方法,所以我尝试通过选择该值。这是 SQL

select RTRIM(LTRIM(col2.value('(/Root/Row/Rowid/text())[1]','varchar(20)')))
from   dbo.T1
Run Code Online (Sandbox Code Playgroud)

但是现在我不知道如何更新这个 xml 值。

有没有办法直接修剪xml值?如果不是,我该如何修剪价值?

我不是要更新表中的单行,而是要修剪表中所有行的 xml 值

sql-server-2008 xml sql-server xquery trim

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

高可用性 SQL Server

我们目前有一个在 Win 2012 专用服务器上运行的 asp.net 应用程序,带有 SQL 2014 Express 的本地副本。

我们希望添加第二个 Web 服务器并将它们放在 NLB 集群中。但是如何处理 SQL... 该网站严重依赖 SQL 数据库(读取和写入)

我隐约熟悉 SQL 复制、可用性组、日志传送等的形式,并且已经阅读了 StackExchange 上关于同一主题的很多帖子,但我仍然有一些问题。

该站点只有中等流量,但 HA 和 RPO 仍然非常重要。我宁愿有一些停机时间,而不是松散的 1 行 SQL 数据,尽管迁移到此设置的重点是减少停机的机会。

一个适用于 SQL Express 的解决方案将是理想的,SQL Standard 很好,但我不想升级到 SQL Enterprise。

A) 关于在 IIS 服务器上保留 SQL,我有什么选择/建议。我宁愿将 SQL 跨越 2 个以上的 Web 服务器,然后只为 SQL 添加额外的服务器。B) SQL 2016 中是否有任何新功能可以帮助解决这个问题?

虽然我知道这不完全是 DBA 的问题,但我还是会问。有没有办法强制 asp.net 同时写入所有可用的 SQL 数据库,但可以从其中任何一个读取?(有点像 Windows NLB 对所有服务器使用相同的 IP,将更新/插入发布到 SQL IP 会将其写入所有服务器,但查询只会使用第一台回答的服务器的结果?

谢谢你们!

replication sql-server high-availability sql-server-2016

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

更改扩展事件会话的名称

我最近才开始使用 Extended Events 并且很喜欢它。但是,我遇到了一个小烦恼,想知道是否有办法解决它。

我有一个非常简单的 ExEvent 会话,名为“DatabaseFooActivity”。一旦我对此感到满意,我就对其进行了扩展,因此它所查看的不仅仅是数据库“Foo”,这意味着会话名称不再准确。现在,当我右键单击会话时,没有重命名选项,当我进入它的属性时,会话名称字段是灰色的。

简而言之,您能否在创建扩展事件会话后更改其名称,而无需删除和重新创建它?

sql-server extended-events

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

如果视图 A 构建在其他视图和表之上,用户是否需要仅查看 A 的权限,或所有内容?

我特别在谈论 SQL Server。我想一个用户尝试过它并得到一个错误(您没有对查询中未明确提及的隐藏底层视图 B 的选择权限)。主视图 A 将一个表和另一个视图(视图 B)连接在一起,并且它们没有视图 B 的权限。

我不负责数据库的权限,但我很好奇它是如何工作的。

您是否需要为视图下构建的每个对象授予权限?还是只是视图本身?或者两者之一?

我认为视图的目的之一是您不想为其授予完全权限的底层对象的快照。这对我来说是不寻常的。

sql-server permissions view

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

如何使用 SQL UPDATE 语句设置每组的排名?

请先参考表结构: 在此处输入图片说明

现在您可以看到有一个独特的约束,包括manager_code, archive_year and archive_day_of_year.

我需要对每个组的经理进行排名,这些组的成员具有相同的 branch_code、年份和年份。这里branch_code代表部门代码。

我试过这个: 查询以获取排名 在一组中排名结果

我可以RANK()在 SQL Server 上使用正确的等级编号,但我不知道如何使用UPDATEtable 上的语句将正确的等级设置回 rank_in_department 列open_account_by_manager_per_day

你知道如何做到这一点吗?

sql-server t-sql rank

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

Object_name(object_id) 返回错误结果

我们试图排除名称类似于“%backup%”或“%WI%”的存储过程。

这是我使用的总查询..

;WITH CTE
AS
(select object_name(object_id) as procname
from sys.sql_modules
where definition LIKE '%CTLEMPLOYEE%' and ( object_name(object_id) NOT LIKE '%BACKUP%' 
  or object_name(object_id) not like '%backup%'
  OR object_name(object_id) NOT LIKE '%Wi%')
)
SELECT * FROM CTE
Run Code Online (Sandbox Code Playgroud)

上述查询的示例输出:
report_spBIHRRecruitmentReport_Phase2_backup

但奇怪的是上面的查询返回结果仍然有名字
一样
。备份
2.Wi

然后我尝试使用 collat​​e 来限制结果之类的结果..

;WITH CTE
AS
(select object_name(object_id) as procname
from sys.sql_modules
where definition LIKE '%CTLEMPLOYEE%' collate SQL_Latin1_General_CP1_CI_AS
 and ( object_name(object_id) NOT LIKE '%BACKUP%' 
  or object_name(object_id) not like '%backup%' 
  OR object_name(object_id) NOT LIKE '%Wi%' collate SQL_Latin1_General_CP1_CI_AS
)) 
SELECT …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql

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

“嗅探”从我的计算机发出的 SQL 查询

我是一名学生,致力于从工作中的 SQL 服务器中提取某些信息。我没有系统管理员权限,我尝试接收它们也没有成功。这是一家大公司,围绕这些事情的官僚主义简直是荒谬的,所以这不是一个选择。

我想运行一个已经由这台计算机上的一个程序执行的查询,但参数略有不同(加入更多的表等)。数据库庞大且极其复杂,因此我一直无法理解该程序如何获取它所获取的信息。

所以我的问题是:有没有办法监控从我的计算机发送的查询,特别是查询文本?这将非常有帮助,并为我节省时间、精力和大量繁文缛节。

(我意识到这可能看起来像一个愚蠢的问题,或者我问的是不可能的 - 如果它不能完成,那没什么大不了的 - 没有它我也能过得去。不过,这会很好。)

sql-server string

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

获取每个日期的第一条和最后一条记录并计算它们的差异

我需要计算DATEDIFF每个日期的第一条记录与每个日期EventCode = 1的最后一条记录之间的秒数EventCode = 2

我在这里发布了 2 天的示例数据集:http : //data.stackexchange.com/dba/query/515591/calculate-the-difference-between-first-event-and-last-event-for-each-日期

所以这就是我如何获得每个日期的第一条记录:

Select
    LogDate,
    StartOfDay = MIN(LogDateTime),
    EventCode
FROM (
        Select 
            LogId,
            LogDateTime,
            LogDate = FORMAT(LogDateTime, 'dd-MMM-yyyy'),
            DriverId,
            EventCode
        FROM 
            #MyLogs
        WHERE EventCode = 1
     ) A 
Group By
        LogDate,  EventCode
Run Code Online (Sandbox Code Playgroud)

这就是我获取每个日期的最后记录的方式 EventCode = 2

Select
    LogDate,
    EndOfDay = MAX(LogDateTime),
    EventCode
FROM (
        Select 
            LogId,
            LogDateTime,
            LogDate = FORMAT(LogDateTime, 'dd-MMM-yyyy'),
            DriverId,
            EventCode
        FROM 
            #MyLogs
        WHERE EventCode = 2
     ) A 
Group By
        LogDate, EventCode …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012

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