标签: sql-server-2008

使用 NOCOUNT 提高程序性能

我希望提高某个程序的性能,我想从插入SET NOCOUNT ON.

我已经阅读了几篇关于这个主题的文章:

亚伦·伯特兰

SET NOCOUNt ON 提高 SQL Server SP 性能

但我不太明白的是,如果每个程序都需要一次,还是每次“开始/结束”时都需要插入它

例如,在下面的过程中 - 我是否应该插入SET NOCOUNT ON右侧并设置最后一个变量:set @PrintInfo = 'No Trip Number...

或者我是否需要SET NOCOUNT ON在程序中的每个“开始”之后插入:

Create procedure [dbo].SSIS_UpdateDriveResults
(
@RSADriveID nvarchar (50),
@ProcedureID int,
@Registered int,
@Performed  int,
...
)
as 

set @ResultError = 0
set @ResultMessage = ''

declare @Id int
declare @Name varchar(64)
declare @DriveId int
declare @ErrorMessage nvarchar(255)
...

Set @ExternalIDs = cast(@RSADriveID as nvarchar(50))
set @IsFixedSite = …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server stored-procedures optimization

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

SQL Server DOUBLE 关键字

DOUBLESQL Server中有保留关键字,但我知道它不是数据类型(其他语言的double是floatreal在SQL Server中);有谁知道为什么这是一个关键字?

我尝试在 SQL Server 2008 和 SQL Server 2012 中使用它,但不能将其用作数据类型或函数,并且在 MSDN 页面中找不到任何信息;只是它是一个保留关键字而不是数据类型。

sql-server-2008 sql-server sql-server-2012

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

如何在 sp 中使用 tsql 语句设置“结果为文本”?

有什么方法可以在执行过程时在 SP 内设置“结果为文本”?tsql 语句?

谢谢。

sql-server-2008 t-sql

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

如何更新/插入/注入节点到 XML

我有一个应用程序,它在 XML 字段中存储可选的站点信息。

示例表:

CREATE TABLE [dbo].[Sites](
    [SiteID] [int] IDENTITY(1,1) NOT NULL,
    [SiteName] [nvarchar](80) NULL,
    [SiteInfo] [xml] NULL );

INSERT INTO [dbo].[Sites] ([SiteName]) VALUES  ('TestSite1') ; 
Run Code Online (Sandbox Code Playgroud)

如果没有应用属性,则 XML 字段为 NULL。如果这些属性中的任何一个确实适用,则应用程序会插入一个 XML 文档和相关节点。

一个有效的例子如下所示:

<SiteInfo>
  <BoreID>ABC123</BoreID>
  <ConsentCompliance>true</ConsentCompliance>
</SiteInfo>
Run Code Online (Sandbox Code Playgroud)

我需要从另一个系统迁移一些数据,所以我试图将数据插入到这个字段/XML 中。到目前为止,我的尝试导致了应用程序不喜欢的单例节点。

使用我在网上找到的一些示例,我尝试了以下操作:

update [dbo].[Sites] 
SET [SiteInfo].modify('insert <Anothernode>ABC123</Anothernode> into (/SiteInfo)') 
where Siteid = 1 
Run Code Online (Sandbox Code Playgroud)

这会引发以下错误:

消息 2226,级别 16,状态 1,第 1 行 XQuery [dbo.Sites.SiteInfo.modify()]:'insert' 的目标必须是单个节点,找到 'element(SiteInfo,xdt:untyped) *'

问题:

  1. 如果该字段为 NULL,我是否需要先更新该字段以插入 xml 的基数,然后才能插入它?
  2. 不使用开闭对的 XML 节点的名称是什么。 For example: <BoreID>ABC123</BoreID> vs a single side <BoreID=ABC123/>
  3. 是否有使用 …

sql-server-2008 xml insert

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

如何优化在 SQL Server 中搜索子字符串的列?

我有一个非常基本的表:

CREATE TABLE [obj_local] (
    [obj_id]     INT             NOT NULL,
    [value]      NVARCHAR (1000) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

这个表存储了很多数据,我需要在value列中搜索一个字符序列:

SELECT [obj_id] FROM [obj_local] WHERE [value] LIKE '%{substring}%'
Run Code Online (Sandbox Code Playgroud)

这是非常缓慢的。我的理解是,由于两边的通配符,索引对我没有帮助,全文索引也对我没有帮助,因为我不是在搜索标记(单词)。

我可以做些什么来优化此搜索?

sql-server-2008 sql-server optimization query-performance

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

是否可以将多个参数同时验证到 sql 中的存储过程中?

在 Microsoft SQL Server 2008 上,我实现了一个包含 20 多个参数的存储过程,在这个 SP 中我更新或插入数据到不接受空值的表中。

在执行插入或更新到表之前,我需要评估这些参数之一是否包含空值。

例子:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[sp_Example]
  @parameter1 char (8),
  @parameter2 char (20),
  @parameter3 char (20),
  @parameter4 char (20),
  @parameter5 char (20),
  @parameter6 char (20),
  @parameter7 char (20),
  @parameter8 char (40),
  @parameter9 char (15),
  @parameter10 char (15) ,
  @parameter11 char (15)...
Run Code Online (Sandbox Code Playgroud)

我有一个可能的解决方案,它是按参数执行评估参数并验证if is null添加一些值,但我正在为此寻找更好的解决方案。

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

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

对年龄范围进行分类并在一列中显示

我想看数据如下

Member   Age  Category
Test1    25    Under 30
Test2    55    51-60
Test3    67    Above 60
Run Code Online (Sandbox Code Playgroud)

我使用了以下查询(来自我上一个问题的答案)根据出生日期和当前日期计算年龄,然后将每个年龄归类到一个名称下。

此查询正在创建单独的列,而不是我想查看一列下的所有类别,以便我可以对该类别列进行分组

WITH AgeData as
(
SELECT
    Username,
    Birthdate,
    DATEDIFF(YEAR, birthdate, GETDATE()) AS AGE
FROM @Table)
SELECT
    Username,
    Birthdate,
    Age,
    CASE
        WHEN AGE < 30 THEN 1
        ELSE 0
    END AS 'Under 30',
    CASE
        WHEN AGE BETWEEN 31 AND 40 THEN 1
        ELSE 0
    END AS '31 - 40',
    CASE
        WHEN AGE BETWEEN 41 AND 50 THEN 1
        ELSE 0
    END AS '41 …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server

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

SQL 查找字段的部分重复项

我有一个表,其中包含一个成员编号字段。该表可以包含该字段具有重复值的记录,并且确实如此。

我有一个 SQL 查询,它将获取该字段的任何重复值,但是,我现在想查找具有相同成员编号的另一条记录但只有 9 个数字中的前 8 个数字的记录。

例如,我想在查询运行时返回以下内容;

MEMBNO
123456789
123456782
Run Code Online (Sandbox Code Playgroud)

目前,我的查询只返回;

MEMBNO
123456789
Run Code Online (Sandbox Code Playgroud)

有两个或多个具有此确切数字的记录。

当前查询是;

SELECT
  basic.MEMBNO
FROM
  basic
GROUP BY
  basic.MEMBNO
HAVING
  COUNT(basic.MEMBNO) >1
ORDER BY
  basic.MEMBNO
Run Code Online (Sandbox Code Playgroud)

我认为可能有效的查询是;

SELECT
  basic.MEMBNO
FROM
  basic
GROUP BY
  basic.MEMBNO
HAVING
  COUNT(LEFT(basic.MEMBNO,8)) >1
ORDER BY
  basic.MEMBNO
Run Code Online (Sandbox Code Playgroud)

总的来说,我对 SQL 和数据库不太熟悉,所以如果我没有很好地解释自己,我深表歉意。它是否需要在某处使用 LIKE 运算符?

我正在使用 Microsoft SQL Server 报表生成器 3.0。

sql-server-2008 sql-server t-sql

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

从性能的角度来看,来自应用程序的数据库连接是否昂贵?

一位同事告诉我,连接到数据库的成本很高,而且可能会损害应用程序的性能。他们让我创建一个调用另外 8 个过程的过程,这样他们调用一个过程并取回 8 个数据集。从我的角度来看,SQL 必须等待每个数据集返回,然后才能开始检索下一个数据集,这样也会产生负面影响。

任何人都可以量化应用程序的连接成本,并让我知道最好的方法是调用多个过程还是一个主过程?

performance sql-server-2008 sql-server connection-pooling connections

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

如何修复 SQL Server 2008 数据库的 Log Shipped 版本中的孤立用户

原谅我的绿色...但会很感激这方面的一些帮助...

我们正在对 SQL Server 2008 实例进行开发工作,并且该服务器上有多个数据库,这些数据库是我们应用程序的核心,以及在某些情况下拥有数据库的特定用户,并且在某些情况下可以只对它们运行查询。

有一个特定的数据库驻留在我们不想接触的生产服务器上,因此我们设置了日志传送以将其数据复制到我们的开发箱。该数据库已在我们的开发盒上正确恢复并接收持续更新。

在生产设备上,我们将开发设备上所需的用户添加到进行日志传送的数据库中

当我们尝试从开发箱上的应用程序查询数据库的日志传送版本(只读)时,我们的用户无法在“当前安全上下文”下访问数据库。

我运行了一个存储过程来验证我的用户确实是孤儿......

我之前在将数据库还原到另一台机器时遇到过这种情况,并运行了一个存储过程来修复“孤立”用户;但是,因为数据库的开发盒版本是只读的,所以存储过程将不起作用。

有关如何处理此问题的任何建议?

sql-server-2008 log-shipping

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