标签: sql-server-2008

为一周中的一天中的每个计数(*)创建一列

我有一张做计件工作的人的桌子。表中的每个条目都有一个用户 ID、名称和他们输入的每个报告的日期。

我需要每周报告这些人从星期日开始每天做了什么

  1. 从周日开始,你如何按一周分组?
  2. 您如何为每天的每个 COUNT(*) 制作一列?

t0001, Tod, 2015-6-29
t0001, Tod, 2015-6-29
t0001, Tod, 2015-6-29
t0001, Tod, 2015-6-29
t0001, Tod, 2015-6-29
t0001, Tod, 2015-6-28
t0001, Tod, 2015-6-28
b0002, Ben, 2015-6-29
b0002, Ben, 2015-6-29
b0002, Ben, 2015-6-28
Run Code Online (Sandbox Code Playgroud)

这就是我要找的。

NAME | S | M | T | W | R | F | S | TOTAL
----------------------------------------
TOD  | 2 | 5 | - | - | - | - | - | 7
BEN  | 1 | 2 | - …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server

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

从sql server表中动态选择列

假设我有一个实际存储记录的表,它看起来像

Create Table dbo.Info
(
 SN int primary key identity(1,1),
 FirstName nvarchar(50) not null,
 LastName nvarchar(50) not null,
 Gender char(1) default 'M',
 Age int check(Age>0)
)
Run Code Online (Sandbox Code Playgroud)

现在为了报告目的,我只需要这个表列名并保存在另一个表中

Create Table Report.InfoColumnOrder
(
 SN int primary key identity(1,1),
 UserId int,
 ColumnName nvarchar(100)
)
Run Code Online (Sandbox Code Playgroud)

因此记录看起来像

1, 1, FirstName
2, 1, LastName
3, 1, Gender
4, 2, LastName
5, 2, FirstName
6, 2, Age
7, 2, Gender
Run Code Online (Sandbox Code Playgroud)

现在,当 id 为 1 的用户登录并希望从表 Info select 命令中获取报告时,应如下所示

Select FirstName, LastName, Gender from dbo.Info
Run Code Online (Sandbox Code Playgroud)

而对于 id 为 …

sql-server-2008 sql-server sql-server-2008-r2 c#

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

删除“登录表”中的许多记录后,服务器登录触发器失败 -SQL 错误 2801

我们定义了一个服务器登录触发器,用于记录每次登录,并在表中记录诸如 windows/sql 用户名、客户端和时间等信息。

该表没有聚集索引,但它有一个“PK_ID”列,它是 bigint 和自动增量。

上周,我们从“登录表”中总共 9000 万条记录中删除了大约 8000 万条记录(带有delete from......,我们没有truncate该表)。

但从那以后我们看到登录触发器失败的多种情况

由于触发器执行,登录 'SQL\xy' 登录失败。
将数据库上下文更改为“master”。
(Microsoft SQL Server,错误:17892)

我们确实重新启动了整个 Windows 服务器几次,之后错误消失了几个小时,但似乎时不时地回来。请注意,这仅在我们删除了这么多记录后才开始出现。

我们发现在用户无法登录之前,我们收到以下错误:

消息 2801,级别 16,状态 1,: 
对象“my_proc”的定义自编译以来已更改。

之后,我们得到了如上所述的错误 17892。

有谁知道可能是什么问题?

触发器定义

    SET ANSI_NULLS ON

    GO

    SET QUOTED_IDENTIFIER ON

    GO

    CREATE TRIGGER [Tr_My_Logon]
     ON ALL SERVER  WITH EXECUTE AS 'xy'
     FOR LOGON
     AS
     BEGIN
        BEGIN TRY
            INSERT INTO mydatabase.myschema.myLogonHistoryTable
                SELECT GETDATE(),
                      ORIGINAL_LOGIN(),
                      EVENTDATA().value('(/EVENT_INSTANCE/LoginType)[1]', 'varchar(500)'),
                      @@SPID,
                      program_name(),
                      HOST_NAME(),
                      EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)[1]', 'varchar(500)')
       END TRY

       BEGIN CATCH
           PRINT ERROR_MESSAGE() …
Run Code Online (Sandbox Code Playgroud)

trigger sql-server-2008 sql-server

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

具有变化模式的双时态表

我必须使用 MS SQL-Server 2008 R2 设计一个涵盖业务假设的数据库。表的当前数据将导出到文本文件并用作某个应用程序的输入。我想将这些表实现为 R. Snodgrass 所描述的双时态表,以便跟踪有效时间和交易时间。

然而,表的逻辑模式有可能并且很可能会改变,即可以添加新列或可以删除​​旧列。我将如何在表格的设计中反映这一点?

显然,我无法真正删除一列,因为所有旧数据都会消失。我应该“标记”带有 NULL 条目的行中不可用的列吗?同样,我将如何跟踪当前正在使用的列?这对于导出数据至关重要,因为只应导出“活动”列。

最后但并非最不重要的是,我如何记录添加了新列或删除了旧列?

sql-server-2008 database-design sql-server

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

还原完整备份后的 SQL Server 还原差异

情况是这样的:我有一个完整备份和一个差异备份。我已将完整备份恢复到数据库中。但不小心丢失了那个备份文件。

现在我想应用差异备份。通常,您必须从完整备份和差异备份中恢复,而无需打开数据库以供使用。但是,我们已经打开了数据库,但没有进行任何更新。

我们做了一个新的完整备份,它应该与原始完整备份相同,至少除了时间戳。也就是说,SQL Server 检测到差异并非完全来自具有该完整备份的数据库。

有没有办法欺骗 SQL Server 允许差异与新的完整备份一起使用?(我意识到这是有风险的,但数据很重要并且愿意冒一些错误的风险。)

有没有其他方法可以从差异备份中获取更新,以便手动应用它们?差异备份文件是否有任何“解码器”?这种情况有什么特殊的恢复工具吗?

sql-server-2008 sql-server backup restore

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

事件 17058 - initerrlog:无法打开错误日志文件 (SQL Server)

我是 SQL Server 的新手,在运行时遇到错误sqlservr.exe (Microsoft® SQL Server® 2008 R2 SP2 - Express Edition)

错误 17058,严重性:16,状态:
1。initerrlog:无法打开错误日志文件 ''。
操作系统错误 = 3(系统找不到指定的路径。)。

这是我的启动参数:

-dc:\Program Files (x86)\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\master.mdf;
-ec:\Program Files (x86)\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Log\ERRORLOG;
-lc:\Program Files (x86)\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\mastlog.ldf
Run Code Online (Sandbox Code Playgroud)

我还确保所有用户都具有完全控制访问权限并从文件夹中删除了只读权限

谢谢!

sql-server-2008 sql-server

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

使用 sp_getapplock 实现队列。这是正确的吗?有没有更好的办法?

我一直在阅读 Paul White 撰写的关于SQL Server 隔离级别的一系列文章,并遇到了一个短语

为了强调这一点,无论发生什么并发修改,用 T-SQL 编写的伪约束都必须正确执行。应用程序开发人员可能会使用 lock 语句来保护敏感操作。T-SQL 程序员最接近风险存储过程和触发器代码的工具是相对很少使用的sp_getapplock系统存储过程。这并不是说它是唯一的,甚至是首选的选择,只是它存在并且在某些情况下可能是正确的选择。

我正在使用sp_getapplock,这让我想知道我是否正确使用它,或者有更好的方法来获得所需的效果。

我有一个 C++ 应用程序,可以 24/7 全天候循环处理所谓的“构建服务器”。有一个包含这些建筑物服务器列表的表格(大约 200 行)。可以随时添加新行,但这种情况并不经常发生。行永远不会被删除,但它们可以被标记为不活动。处理一个服务器可能需要几秒到几十分钟,每个服务器都不一样,有的“小”,有的“大”。一旦服务器被处理,应用程序必须等待至少 20 分钟才能再次处理它(服务器不应过于频繁地轮询)。应用程序启动 10 个并行执行处理的线程,但我必须保证没有两个线程试图同时处理同一个服务器. 两个不同的服务器可以而且应该同时处理,但每个服务器的处理频率不能超过 20 分钟一次。

下面是一个表的定义:

CREATE TABLE [dbo].[PortalBuildingServers](
    [InternalIP] [varchar](64) NOT NULL,
    [LastCheckStarted] [datetime] NOT NULL,
    [LastCheckCompleted] [datetime] NOT NULL,
    [IsActiveAndNotDisabled] [bit] NOT NULL,
    [MaxBSMonitoringEventLogItemID] [bigint] NOT NULL,
CONSTRAINT [PK_PortalBuildingServers] PRIMARY KEY CLUSTERED 
(
    [InternalIP] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server t-sql locking

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

SQL Server - 停止服务器端跟踪

我想设置服务器端重播跟踪并编写设置跟踪的脚本。但是,我希望跟踪在 12 小时后或创建 10 个 1GB 文件后结束。通常对于最大文件数,系统会删除最旧的文件,然后创建新文件。在我的情况下,这将以文件 2-11 而不是所需的 1-10 结束。我有空间限制,需要从头到尾重播所有步骤。我可以将文件大小限制设置为 10GB。我认为文件大小有 1GB 的限制,但这可能只是 GUI 中的一个限制。

关于如何在脚本达到 10 个文件后停止脚本的任何想法?

declare @rc int
declare @TraceID int
declare @maxfilesize bigint
declare @DateTime datetime
declare @maxfilecount int

set @DateTime = DATEADD(HOUR,12,GETDATE())
set @maxfilesize = 1024
set @maxfilecount = 10

exec @rc = sp_trace_create @TraceID output, 2, N'D:\Output\Trace', @maxfilesize, @Datetime, @maxfilecount 
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server t-sql trace

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

查看临时表

我正在使用 SQL Server 2008 并且我的存储过程确实插入到 #temptable 中。我的过程已经运行了 32 小时(考虑到它必须聚合的数据量,这并不是闻所未闻),我想知道是否在存储过程本身之外,我可以查询临时表并查看临时表中的内容桌子?

目前我能想出的唯一解决方案是停止程序,我不想这样做:(
1) 停止程序并使用全局临时表 ##temptableglobal
2) 停止程序并使用实际表 temptable

编辑

按照下面链接的教程,我的第一页返回以下内容

0XE601000000100

但如果我试着跑

DBCC TRACEON (3404)
DBCC PAGE (tempdb, 1, 173, 3) With table results
Run Code Online (Sandbox Code Playgroud)

数据似乎不是纯文本格式,例如 VALUE 列中的数据显示为 0,而 #temptable 中根本不应该包含任何值为 0 的值。

sql-server-2008 temporary-tables

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

SQL Server 群集 - 主动/主动还是主动/被动?

主动/主动集群与主动/被动集群的逻辑是什么?

我搜索了很多并阅读了很多文件,但没有找到答案。

在活动的活动集群中,我可以拥有 1 个位于共享存储中的数据库并且该数据库有 2 个实例吗?

主动式主动集群的优缺点是什么?

在主动被动集群中,我可以拥有一个位于共享存储中的数据库并且它使用主动节点。如果主动节点关闭,被动节点会成为主动节点吗?

sql-server-2008 sql-server clustering

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