我希望提高某个程序的性能,我想从插入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) DOUBLESQL Server中有保留关键字,但我知道它不是数据类型(其他语言的double是float或real在SQL Server中);有谁知道为什么这是一个关键字?
我尝试在 SQL Server 2008 和 SQL Server 2012 中使用它,但不能将其用作数据类型或函数,并且在 MSDN 页面中找不到任何信息;只是它是一个保留关键字而不是数据类型。
有什么方法可以在执行过程时在 SP 内设置“结果为文本”?tsql 语句?
谢谢。
我有一个应用程序,它在 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) *'
问题:
For example: <BoreID>ABC123</BoreID> vs a single side <BoreID=ABC123/> 我有一个非常基本的表:
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)
这是非常缓慢的。我的理解是,由于两边的通配符,索引对我没有帮助,全文索引也对我没有帮助,因为我不是在搜索标记(单词)。
我可以做些什么来优化此搜索?
在 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
我想看数据如下
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 查询,它将获取该字段的任何重复值,但是,我现在想查找具有相同成员编号的另一条记录但只有 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。
一位同事告诉我,连接到数据库的成本很高,而且可能会损害应用程序的性能。他们让我创建一个调用另外 8 个过程的过程,这样他们调用一个过程并取回 8 个数据集。从我的角度来看,SQL 必须等待每个数据集返回,然后才能开始检索下一个数据集,这样也会产生负面影响。
任何人都可以量化应用程序的连接成本,并让我知道最好的方法是调用多个过程还是一个主过程?
performance sql-server-2008 sql-server connection-pooling connections
原谅我的绿色...但会很感激这方面的一些帮助...
我们正在对 SQL Server 2008 实例进行开发工作,并且该服务器上有多个数据库,这些数据库是我们应用程序的核心,以及在某些情况下拥有数据库的特定用户,并且在某些情况下可以只对它们运行查询。
有一个特定的数据库驻留在我们不想接触的生产服务器上,因此我们设置了日志传送以将其数据复制到我们的开发箱。该数据库已在我们的开发盒上正确恢复并接收持续更新。
在生产设备上,我们将开发设备上所需的用户添加到进行日志传送的数据库中
当我们尝试从开发箱上的应用程序查询数据库的日志传送版本(只读)时,我们的用户无法在“当前安全上下文”下访问数据库。
我运行了一个存储过程来验证我的用户确实是孤儿......
我之前在将数据库还原到另一台机器时遇到过这种情况,并运行了一个存储过程来修复“孤立”用户;但是,因为数据库的开发盒版本是只读的,所以存储过程将不起作用。
有关如何处理此问题的任何建议?
sql-server-2008 ×10
sql-server ×7
optimization ×2
t-sql ×2
connections ×1
insert ×1
log-shipping ×1
performance ×1
xml ×1