小编mhe*_*all的帖子

记录存储过程参数值

我之前曾在 SQL Server 环境中工作过,其中日志记录是我们存储过程的一部分,用于捕获执行开始/结束、参数值和错误消息,我发现这非常有用,并且是我希望在新环境中引入的内容。

用于此日志记录的表如下所示,使用语句将参数捕获INSERT到表中,并将 with 值隐式转换为NVARCHAR

CREATE TABLE dbo.Execution
(
    Id                  INT IDENTITY(1,1)           NOT NULL
,   SchemaName          NVARCHAR(128)               NOT NULL
,   ProcedureName       NVARCHAR(128)               NOT NULL
,   ExecutionStart      DATETIME                    NOT NULL
,   ExecutionEnd        DATETIME                    NULL
,   ExecutionFailed     BIT                         NOT NULL
)

CREATE TABLE dbo.ExecutionError
(
    Id                  INT IDENTITY(1,1)           NOT NULL
,   ExecutionId         INT                         NOT NULL
,   CustomErrorMessage  NVARCHAR(8000)              NULL
,   SqlErrorMessage     NVARCHAR(8000)              NULL
)

CREATE TABLE dbo.ExecutionParameter
(
    Id                  INT IDENTITY(1,1)           NOT NULL
,   ExecutionId         INT …
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures parameter logging

6
推荐指数
1
解决办法
5470
查看次数

如何查询 XML 列集中的确切值

我有一个包含 80 多个稀疏列和一个列集列的表,这是一个简单的例子:

DROP TABLE IF EXISTS #ColumnSet
GO

CREATE TABLE #ColumnSet
(
    Id        INT          NOT NULL
  , Value1    VARCHAR(100) SPARSE NULL 
  , Value2    VARCHAR(100) SPARSE NULL 
  , Value3    VARCHAR(100) SPARSE NULL 
  , Value4    VARCHAR(100) SPARSE NULL 
  , AllValues XML COLUMN_SET FOR ALL_SPARSE_COLUMNS
)
GO

INSERT INTO #ColumnSet
(Id, Value1, Value2, Value3, Value4)

VALUES
(1, 'POSITIVE', NULL, NULL, NULL),
(2, 'NEGATIVE', NULL, 'NEGATIVE', NULL),
(3, NULL, NULL, 'NEGATIVE', 'POSITIVE'),
(4, 'NEGATIVE', NULL, 'THIS IS NOT A POSITIVE RESULT', NULL)
GO …
Run Code Online (Sandbox Code Playgroud)

xml sql-server xquery sql-server-2016 sparse-column

6
推荐指数
2
解决办法
1150
查看次数

SSRS 跨 2 个组值合并数据

我为 SSRS 2008 创建了一份报告,其结果如下。

报告结果: 我希望实现的是粉红色,AD 中的那些结果在 AM 和 PM 下,文本居中,即合并的单元格。

工作日和上午/下午是基于我表中字段的矩阵中的组标题。为了显示数据,我使用了矩阵数据区域内的表格。

我已经阅读了其他关于在表中创建一个附加行的其他帖子,该行将 2 个单元格合并在一起,使用表达式在不使用时隐藏该行,尽管我没有设法让它正常工作。

2012 年 3 月 28 日更新:
我设法让 AD 出现在 AM 和 PM 下。我所做的是删除 AM/PM 列组并在 Weekdays 组下创建 2 个单元格,并在这些单元格中输入文本 AM 和 PM。然后我在矩阵的数据部分创建了 2 行,底行有 2 列。在这些单元格中的每一个中,都有一个带有表达式的表格

=IIF(Fields!SessionIdentifier.Value="AD","AD",Nothing)

每个表中的行可见性是使用表达式设置的:

=IIF(Fields!SessionIdentifier.Value="AD", False, True)

我现在想做的是在矩阵为空时隐藏矩阵数据区域中的顶行,但我还没有想出执行此操作的表达式。 在此处输入图片说明

sql-server-2008 ssrs

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

如果未指定,则查询时 dbo 是默认架构吗?

如果我查询存在于两个不同模式但具有相同名称的表,是什么决定了使用哪个表?

例如,我的表Bar同时存在于dbo和 中foo,如果我执行下面的语句,则返回一个:

SELECT * FROM Bar
Run Code Online (Sandbox Code Playgroud)

我认为这是由用户默认架构决定的,但似乎并非如此。

我问是因为我发现其他人编写的查询没有指定模式名称,但被查询的数据库在 ETL 的不同模式中具有相同的表。

sql-server sql-server-2008-r2

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

有多少 LEFT JOINS 使 VIEW 无法使用?

我有一个视图,其中涉及 20 多个表上的 LEFT JOINS 到基表,但是在查询此视图并查看执行计划时,我得到了完全出乎意料的结果。

例如,对于下面的查询,我希望在表上进行聚集索引查找:

SELECT id FROM dbo.TableName WHERE id = 256
Run Code Online (Sandbox Code Playgroud)

而当我使用视图时,我会在表上找到聚集索引以及 3 个嵌套循环(左外连接)。

SELECT id FROM dbo.ViewName WHERE id = 256
Run Code Online (Sandbox Code Playgroud)

为什么会出现这种情况?上面是一个非常简单的例子,但是当从视图中选择额外的列时,越来越多的不必要的 LEFT JOINS 出现在执行计划中。

sql-server execution-plan sql-server-2008-r2 view

0
推荐指数
1
解决办法
321
查看次数