小编kac*_*apy的帖子

我如何知道我的 SQL 数据库有什么恢复模型?

是否可以运行 SQL 命令来确定数据库的恢复模式?我想知道它是否完全恢复。

sql-server-2005 sql-server

19
推荐指数
2
解决办法
8170
查看次数

测试存储过程的可伸缩性

我有一个电子邮件应用程序,它将被要求在每个页面加载时将给定用户的新消息数量传送到 UI。我在数据库级别上测试了一些变化,但所有内容都由存储的 proc 调用抽象。

我试图猛击数据库以查看断点(每秒请求数)是什么。

简而言之,我有一个表,比如这个 userId、newMsgCount,在 userId 上有一个聚集索引。SQL 应该能够每秒处理成百上千个这样的响应。我认为落后者是我的 .NET 应用程序。

我怎样才能使这个测试成为一个很好的测试来实现基于 SQL 性能的测试结果?

有没有一个工具,我可以给它一个存储的过程名称和参数,以便它打我的数据库?

我想看看数据库是否可以返回分钟。每秒 250 个响应。

performance sql-server testing scalability performance-testing

14
推荐指数
2
解决办法
4384
查看次数

日志表应该获取 id 字段还是主键?

我有一个日志表,用于捕获某些文件何时导出到另一个系统的日期时间戳。

导出的日志表目前有三个字段:

id                (primary key)
messageId         (int)
exportedDateTime  (datetime)
Run Code Online (Sandbox Code Playgroud)

回顾这一点,我发现该id字段没有任何用处,因为没有连接到该表。在这个表上唯一的工作是插入处理消息的批处理作业并插入到这个日志表中。

我应该删除该id字段吗?

我是否应该在任何一个主键messageIdexportedDateTime或两者兼而有之?

database-design primary-key logs

13
推荐指数
2
解决办法
6139
查看次数

显式生成唯一 ID 的标识列或 UDF?

我正在争论是否最好PRIMARY KEY使用Identity Columns,我们使用显式生成唯一 id 的 UDF 。

  • 我在为身份栏争论。
  • 我的合作伙伴主张手动生成值,他声称
    • 通过将 UDF 放在另一个可以拥有 UDF 的桌子上
      • 锁定资源
      • 递增的ID表叫做一个字段ID_Value1
      • 将此用作全局唯一标识符
    • 或者id+1在插入时让表做一个
    • 在没有识别约束的服务器和/或环境之间移动数据更简单;从一个有数据的数据库移动到另一个类似的数据库,比如暂存或虚拟数据。对于非生产中的测试,我们可能希望将昨天的所有记录提取到暂存以进行测试。

哪个实现更有意义?

sql-server-2005 sql-server uniqueidentifier identity functions

11
推荐指数
3
解决办法
3063
查看次数

在 SQL 2005 存储过程中添加错误处理的最佳方法是什么?

什么是使存储过程足够健壮以使其可以很好地扩展并包含错误处理的好方法?

此外,在存储过程中处理多个错误场景并拥有一个智能反馈系统来向调用应用程序返回有意义的错误信息的最佳方法是什么?

sql-server-2005 best-practices stored-procedures

11
推荐指数
2
解决办法
3453
查看次数

使用连接时,SQL Server 如何对结果进行排序?

SQL Server 如何计算查询执行结果集中记录的顺序?

我试图让它正面或反面,但发现自己挠头。当我更改字段时,我选择的顺序也会更改。当我用 a 执行下面的 SQL 时,SELECT *我得到相同的记录,但顺序大不相同。

 SELECT TOP (900)
    AD.ATTACHMENTID,
    AD.NAME,
    AD.ISINLINE,
    AD.INSERTEDDATETIME,
    ATMT.ATTACHMENTBLOB,
    U.UFID
  FROM ATTACHMENTDETAIL AD WITH (NOLOCK)
  INNER JOIN MESSAGEATTACHMENT MA ON MA.ATTACHMENTID = AD.ATTACHMENTID
  INNER JOIN ATTACHMENT ATMT ON ATMT.ATTACHMENTID = AD.ATTACHMENTID
  INNER JOIN MESSAGE MSG ON MSG.ID = MA.MESSAGEID
  INNER JOIN MESSAGEDETAIL MD ON MD.MESSAGEID = MA.MESSAGEID
  INNER JOIN [USER] U ON U.ID = MD.USERID
  LEFT OUTER JOIN XmlExtractionMapping XM ON MA.MESSAGEID = XM.MessageId
    WHERE AD.FILEBOXTOKEN IS NULL 
    AND (XM.XMLEXTRACTIONDATE …
Run Code Online (Sandbox Code Playgroud)

sql-server order-by

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

如何用连接替换这个 where 子句?

通常,当我看到使用以下内容的 SQL 时:

select * from employees where epmloyeeTypeId in (select id from type where name = 'emp') 
Run Code Online (Sandbox Code Playgroud)

where用这个替换:

select e.* from employees e 
inner join type t on t.id=e.epmloyeeTypeId and t.name = 'emp'
Run Code Online (Sandbox Code Playgroud)

如果它是一个not in(如下所示)而不是一个in子句,是否可以对逆做同样的事情?

INSERT into Subscriptions(ProjectId, RecordTypeCID, NTID, Active, Added, LastUpdate, UpdateBy)   
 SELECT @ProjectId, RecordTypeCID, @NTID, 1, GETDATE(), GETDATE(), @NTID  
 FROM @Check CHK  
 WHERE CHK.ActiveStatus=1  
        And Not Exists (SELECT SubscriptionId FROM Subscriptions  
                        WHERE ProjectId=@ProjectId           
                        and NTID=@NTID          
                        and RecordTypeCID = CHK.RecordTypeCID
                        ) …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 sql-server except

8
推荐指数
2
解决办法
5048
查看次数

为什么我不能直接调用我的 UDF?为什么我需要将它限定为 3 个级别?

我刚刚创建了一个 UDF 并对其进行了测试,我发现只有在使用此语法时才有效

SELECT [PMIS].[dbo].[fnIsReportingTo] (50,1132)
Run Code Online (Sandbox Code Playgroud)

我期待它像这样工作:

select * from fnIsReportingTo (50,1132)
Run Code Online (Sandbox Code Playgroud)

或者

select fnIsReportingTo (50,1132)
Run Code Online (Sandbox Code Playgroud)

这是我的创建 SQL:

create function fnIsReportingTo
(
@BossID int,
@EmployeeID int)
RETURNs bit
AS
begin
declare @ret bit
    if exists (select * from dbo.fnGetEmployeeHierarchy(@BossID) where employeeID=@employeeID)
        select @ret=1
    else
        select @ret=0
return @ret
end
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 sql-server syntax functions

7
推荐指数
1
解决办法
377
查看次数

在单个存储过程中返回多个聚合的最有效方法?

获得多个聚合结果值的最佳或最有效方法是什么?

基本上,我有一个电子邮件应用程序,想要获取每种类型的文件夹(收件箱、已发送、已存档、已标记...)的所有邮件数量,如下定义。

这是我在一个存储过程调用中尝试做的事情的示例。(其中 [uid] 是用户 ID)

SELECT * FROM Message
Inbox    WHERE [to]    = [uid] 
Unread    WHERE [to]    = [uid] and isread = 0
Flagged    WHERE [to]    = [uid] and isFlagged = 1
Drafts    WHERE [to]    = [uid] and isDraft = 1
Sent Messages    WHERE [from] = [uid]
Archived Messages    WHERE [to]     = [uid] and isArchived = 1
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 stored-procedures aggregate

7
推荐指数
1
解决办法
767
查看次数

如何有效地查询和聚合规范化的 SQL 数据库?

关于在单个存储过程中返回多个聚合的最有效方法?

我有一个电子邮件类型的应用程序,想为用户选择所有消息(收件箱)。问题是我将电子邮件的标题部分规范化到数据库中,这样平面数据就会进入消息表,而从、到、抄送、密件抄送则存储到另一个表中。

根据 PK/ FK 关系。

我非常重视的一件事是 SQL 解决方案的效率,因为这将是多次执行的代码,并且可能是整个数据库中运行次数最多的 sql

这里的上下文是我的数据库模式的视图。

数据库架构

sql-server-2005 query

7
推荐指数
2
解决办法
3854
查看次数