小编War*_* P的帖子

执行计划显示昂贵的 CONVERT_IMPLICIT 操作。我可以通过索引解决这个问题还是需要更改表?

我有一个非常重要、非常缓慢的视图,其中在 where 子句中包含了一些非常丑陋的条件,例如这样。我也知道连接是粗略和慢速连接varchar(13)而不是整数标识字段,但想改进下面使用此视图的简单查询:

CREATE VIEW [dbo].[vwReallySlowView]  AS  
AS  
SELECT     
  I.booking_no_v32 AS bkno, 
  I.trans_type_v41 AS trantype, 
  B.Assigned_to_v61 AS Assignbk, 
  B.order_date AS dateo, B.HourBooked AS HBooked,   
  B.MinBooked AS MBooked, B.SecBooked AS SBooked, 
  I.prep_on AS Pon, I.From_locn AS Flocn, 
  I.Trans_to_locn AS TTlocn,   
                      (CASE I.prep_on WHEN 'Y' THEN I.PDate ELSE I.FirstDate END) AS PrDate, I.PTimeH AS PrTimeH, I.PTimeM AS PrTimeM,   
                      (CASE WHEN I.RetnDate < I.FirstDate THEN I.FirstDate ELSE I.RetnDate END) AS RDatev, I.bit_field_v41 AS bitField, I.FirstDate AS FDatev, I.BookDate AS DBooked,   
                      I.TimeBookedH …
Run Code Online (Sandbox Code Playgroud)

sql-server view

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

在 SQL Server Profiler 中进行跟踪时,是否可以在过程调用中记录传入参数值?

使用 SQL Server Profiler(我使用的是 SQL Server 2012),我试图生成一个有用的跟踪来显示参数值,而不仅仅是带有变量名的 SQL。存储过程遍历大量库存数据以生成一些非常有价值的结果,我正在尝试记录现有行为,以便我可以对其进行单元测试,准确定义它,然后将其重构为合理的东西。

我有一个存储过程,它在一个循环中执行一个 54 个参数的子过程,其中存储过程创建一个游标然后执行一个 while 循环。这是一个简化的视图:

CREATE PROCEDURE 
   [dbo].[OuterProcedure]       
   (  @ProductCode varchar(8),          
     -- 41 more parameters omitted
   )
AS            
  SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED   
  SET NOCOUNT ON           
 DECLARE @AboutFourHundredLocalvariables -- omit about 400 local variable declarations.
 -- OMIT ABOUT 10 temporary table declarations.
 DECLARE  aCursor CURSOR FAST_FORWARD FOR         
   SELECT [ID],bkno,  -- about 40 fields omitted.
              FROM vwVeryComplexViewThatDoesALotOfVeryBrutalJoins         
              WHERE  (about_80_boolean_expressions AND omitted_here)
        ORDER BY some,keys,like,this

OPEN aCursor          
FETCH NEXT FROM aCursor /* Get …
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures profiler sql-server-2012

13
推荐指数
1
解决办法
4360
查看次数

在 MS SQL 数据库中记录大量相互关联的存储过程:什么工具或格式?

我希望这是一个比“阅读一本 1000 页的书”更短答案的问题,但是,如果这是真实情况,那么就用它来打击我。

我不是真正的 DBA,我是一名软件开发人员,我意识到我们需要 DBA,但我工作的商店的 DBA 为零。然而,我们的 MS SQL 数据库设计包括几个核心存储过程,是一个巨大的混乱。存储过程很慢,我们怀疑它们有错误,但我们甚至不知道它们应该如何工作,所以我们不知道如何修复它们。

作为开始,我决定我们将记录它应该如何工作,然后我们将开始单元测试,并构建一组单元测试来帮助证明存储过程确实可以工作。它们执行的逻辑是我们应用程序的关键部分,可以说,它是我们公司主要产品的“皇冠上的明珠”,它的工作方式完全没有记录。

我正在寻找专业 DBA 可能希望现有的特定技术文档,或者他们可能会自己编写(如果必须),以了解相互调用的巨大存储过程网络。

  1. 记录大型存储过程的常用格式是什么?每个输入参数的预期值的描述(即“前置条件”、“后置条件”,即布尔参数在打开或关闭时会发生什么变化等?)

  2. 人们通常如何记录它?仅 SQL 注释?特定于目的的外部工具?外部“文档”?除了 MS SQL Management Studio 之外,我们没有 SQL 工具,但我们想知道是否有一种工具可以更好地理解、记录和测试我们的环境。也许这是问我问题的更好方式;我需要什么工具来解决我们的烂摊子?

我们的目标是能够:

A. 使用我们生成的文档或我们添加到环境中的任何工具来帮助理解过程应该如何工作,然后我们可以继续为存储过程创建单元测试覆盖率。

B. 向客户端应用程序开发人员展示如何正确调用这些复杂的存储过程。

C. 单元测试我们的存储过程。

sql-server stored-procedures documentation sql-server-2008-r2

12
推荐指数
1
解决办法
3863
查看次数

如何配置 SQL Server 2012 以便它可以恢复和查看我的用户帐户中的文件?

我有一个 SQL Server 2012 实例作为服务在我的计算机上运行,​​根据服务页面,它以帐户“NT Service\MSSQLSERVER”登录。但是,我无法在计算机管理屏幕的“本地用户和组”区域中的其他任何地方看到该帐户名称,因为如下面的链接所述,这不是用户帐户,而是服务名称,在该框中微软非常有帮助地标记了“帐户”。在这一点上,我可以看到很多人感到困惑。

我试图完成的任务是使用 SSMS 对话框“定位备份文件”恢复文件,该对话框使用的对话框与任何标准的 Windows 文件打开对话框完全不同,可能是因为它正在执行“远程”工作并从SQL 服务器的安全上下文,这是最终用户困惑的另一个丰富来源,我希望这个问题可以帮助澄清。

到目前为止,如果我想恢复我的一个文件夹中的备份 .mdf/.bak 文件,我必须将该文件夹设置为每个人都可以读取,否则我无法使用 SQL Server“定位备份文件”窗口。我发现这样一个想法,即您正在使用 GUI 与具有与您不同的用户帐户和权限的服务进行对话,Microsoft 甚至没有人愿意向您说明这一点,即使我有多年的 Windows 系统管理经验,也非常令人困惑.

我希望我错过了一些 SQL Server 文档页面,这些页面会告诉您,在安装新的 SQL Server 实例后,您可以如何设置安全性。

这样的论坛帖子甚至让微软工作人员说“这很复杂”,并且在 Denali 中“再次改变了”。这在 SQL Server 2012 中现在如何工作,以及如何将读取属于用户的文件的权限添加到 SQL 数据库引擎的安全性SID

security sql-server

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

大量执行计划挂起 SSMS

我有一个大约需要 3-5 秒的存储过程,我试图理解它,所以我想要一个执行计划。当我在启用了执行计划的 SQL Server Management Studio 中运行它时,它需要超过 15 分钟,然后,我得到一个显示“执行计划”的选项卡,但该选项卡是空的。任何进一步尝试运行任何 SQL(甚至select * from foo)都不再有效。我有一个损坏的 SQL 服务器管理工​​作室应用程序,我必须将其关闭并重试。我已经做了 3 次,浪费了 45 分钟,现在我准备学习一些替代方案。

首先,是否有一种可靠的命令行方式可以SQLPLAN为特定的 sql 脚本生成文件,可能是从命令行,然后我可以使用 SSMS 以外的其他工具进行调查来生成我的计划。

其次,如果没有内置可靠的命令行方式来生成 SQL 执行计划并将其存储为文本或 XML,那么我想知道是否存在其他一些可以做得很好的第三方工具在非常大的 SQLPlans 上,特别是当它的 GUI 绘图部分不堪重负时不会窒息和死亡。

当 SSMS 不会生成并向您显示执行计划时,您会怎么做?我使用的是 SQL 2008 R2 Standard 及其包含的 SSMS 版本,我没有任何额外的插件。

更新我正在调用一个存储过程,它创建一个游标,它执行子查询,并在循环中做大坏事,生成超过 10K 个单独的子查询语句。看起来我真的需要重构它以减少输出风暴。

Update2它确实看起来像服务器端跟踪(将问题区域归零),然后返回到分析,然后可能需要返回到查询计划。我在大图中放大得太深了,我需要把它放大一点。

ssms execution-plan sql-server-2008-r2

5
推荐指数
3
解决办法
4708
查看次数

设置变量时是否有使用 NOT IN (1,2,3) 语法的紧凑方法?

像 NOT IN (1,2,3) 这样的表达式在 where 子句中是有效的:

SELECT foo FROM bar WHERE 
  ((record_type NOT IN (2, 3, 7, 18, 19, 20, 21,12,13,22))
Run Code Online (Sandbox Code Playgroud)

但是,如果我想将一个由上述检查组成的复杂表达式从 WHERE 子句移动到 SET @Var= 语句,有没有办法做到这一点而无需像这样重写它:

declare @record_type int
set  @record_type  = 1

declare @ignoretype bit
IF    (@record_type <> 2)and(@record_type <> 3)and(@record_type <> 7)and
      (@record_type <> 12)and(@record_type <> 13)and
      ( (@record_type < 18) or (@record_type > 22))
     set @ignoretype=1
else
     set @ignoretype=0
Run Code Online (Sandbox Code Playgroud)

我觉得过去适合在一个可读行中的内容现在是一个巨大的混乱,这真的很糟糕。我是否在 SQL 中遗漏了一些与“NOT IN (1,2,3)”等效的语法,这些语法适用于set @var =IF表达式?我会把上面写成:

select @ignoretype = (@record_type <> …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql

5
推荐指数
1
解决办法
289
查看次数

我可以在 SQL Server 2016 CTP 2.X 中将 VARCHAR 字段主体转换为不带引号的 JSON 结果吗?

我已经下载并安装了 SQL Server 2016 Community Technology Preview 2.3,如果我理解正确,它应该包含一个名为JSON_VALUE. (更新:CTP 2.4 已经发布,但也没有提到新的 JSON 功能)

从已经可以使用的 JSON 功能开始,... FOR JSON AUTO可以在我的SELECT语句中指定“ ” ,如下所示:

SELECT [ID], [DATA] FROM [dbo].[JSONDEMO] FOR JSON AUTO
Run Code Online (Sandbox Code Playgroud)

上面我的演示查询的结果将是一个包含一列的结果集,具有一些自动生成的名称,例如JSON_F123123123JSON 格式的值,例如:

[{"ID":"IDVALUE", "DATA":"{ {name:'ramsoft', id:1234}, ... }", ... }] 
Run Code Online (Sandbox Code Playgroud)

到目前为止DATA一切顺利,但如果包含 JSON 数据,您将收到一个包含数据字符串文字的 JSON 文档,即使该字符串文字是有效的 JSON。你实际上可能想要的,或者我想要的,是:

 [{"ID":"IDVALUE", "DATA":{ {name:'ramsoft', id:1234}, ... }, ... }] 
Run Code Online (Sandbox Code Playgroud)

根据一些 MS 博客帖子,要将 JSON 值作为 JSON 值而不是作为VARCHAR(n)字符串获取,您应该编写:

SELECT [ID], JSON_VALUE(D.DATA,'$') DATA   
FROM [dbo].[JSONDEMO] D FOR …
Run Code Online (Sandbox Code Playgroud)

sql-server json sql-server-2016

3
推荐指数
1
解决办法
1256
查看次数