标签: sql-server-2012

查询模式的sql

我希望有人能用这个引导我朝着正确的方向前进。我有一张表,上面有学生成绩。

Create Table StudentGrades
( 
  StudentID references Student(StudentID) int not null,
  GradeIssued varchar(1) not null,
  WhenIssued datetime not null default(getdate())
)
Run Code Online (Sandbox Code Playgroud)

我想编写一个查询,执行以下操作:查找成绩(按顺序)为 D,然后是 C,然后是另一个 C,然后是 A 的学生。我知道方向(因为成绩的日期发布)模式应该在,但我想不出如何在不使用游标的情况下编写它。

根据我的查询经验,我通过 WHERE 和 HAVING 子句进行过滤,但是当我想找到特定模式时,我不确定该去哪里。

t-sql sql-server-2012 pattern-matching

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

在 Sql Server 索引(物化)视图中创建嵌套 XML

此页面https://msdn.microsoft.com/en-us/library/ms188276.aspx表示如果您想要嵌套的 XML(即 XML 树),那么您需要像这样设置查询:

SELECT Col1, 
       Col2, 
       ( SELECT Col3, Col4 
        FROM  T2
        WHERE T2.Col = T1.Col
        ...
        FOR XML AUTO, TYPE )
FROM T1
WHERE ...
FOR XML AUTO, TYPE;
Run Code Online (Sandbox Code Playgroud)

(使用子查询)

这与索引视图的要求完全不一致(不允许子查询)。

有没有办法将这两个功能结合在一起?(有一个带有 XML 树的索引视图?)

我的问题的不足是: 如何在不使用任何子查询或联合的情况下从许多表创建 XML 树(即嵌套的 XML 节点)。(因此它将与 SQL Server 索引视图一起使用。)

仅供参考:不确定是否重要,但我的特定查询有超过 10 个级别的 xml 树(从一堆不同的表中提取)。

xml sql-server materialized-view sql-server-2012

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

如何联合四个不同的表

我有两个表,它们都使用子查询。这两个表通过使用UNION ALL. 我还有另外两个只使用一个WHERE子句的表,并且这两个表都使用UNION ALL. 我正在努力加入所有 4 个表,因为我在使用UNION ALL和时一直低于错误UNION

消息 205,级别 16,状态 1,第 1 行所有使用 UNION、INTERSECT 或 EXCEPT 运算符组合的查询在其目标列表中必须具有相同数量的表达式。

t-sql subquery sql-server-2012 union

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

插入来自对 sp_sequence_get_range 的调用的数字范围

鉴于以下代码:

CREATE SEQUENCE dbo.NextTestId AS [bigint]
 START WITH 10 INCREMENT BY 2 NO CACHE 
GO

DECLARE  
  @variableNumberOfIdsNeeded INT = 7, -- This will change for each call
  @FirstSeqNum SQL_VARIANT , @LastSeqNum sql_variant, @SeqIncr sql_variant;  

EXEC sys.sp_sequence_get_range @sequence_name = N'dbo.NextTestId', 
            @range_size = @variableNumberOfIdsNeeded, 
            @range_first_value = @FirstSeqNum OUTPUT, 
            @range_last_value = @LastSeqNum OUTPUT, 
            @sequence_increment = @SeqIncr OUTPUT;

-- The following statement returns the output values
SELECT @FirstSeqNum AS FirstVal, @LastSeqNum AS LastVal, @SeqIncr AS SeqIncrement;
Run Code Online (Sandbox Code Playgroud)

我得到这样的结果:

FirstVal    LastVal    SeqIncrement 
-------     -------    -------------- 
38 …
Run Code Online (Sandbox Code Playgroud)

sql-server sequence sql-server-2012 cross-apply number-table

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

无法部署项目。稍后再试。(Microsoft SQL Server,错误:27118)

我尝试将现有 SSIS 项目的新版本部署到集成服务中

目录和获取错误:

“无法部署项目。稍后再试。(Microsoft SQL Server,错误:27118)”

我在文件系统(驱动器“D:\”)上有新的 .ispac 文件。我试过:

  • 从 SSMS 部署
  • 从命令行
  • 使用 Power Shall 脚本

我得到了同样的错误。

(SQL Server 2012)

ssis sql-server-2012

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

8Kb 行大小限制被忽略 - 但只是有时!

由于代码测试不佳(不是我的!),我最终得到了一个包含 319 个VARBINARY(MAX)字段、两个DATETIME字段和两个UNIQUEIDENTIFIER字段的表。显然这并不理想,但它应该仍然在 SQL Server 可以处理的行大小的限制内。

据我了解,VARBINARY(MAX)它作为一个 24 字节的指针存储在表上,指向行外存储。24 * 319 = 7656字节,加上其他四个字段= 7704个字节,所以我只是在我可以投入一排的限制。

这一切都很好,直到代码开始将数据插入到这个表中。在与消息崩溃之前它有 6 行:

无法创建大小为 8345 的行,该行大于允许的最大行大小 8060。语句已终止。

这是非常令人费解的,因为任何行都不应该比其他行大(至少在行上)。我已经编写了表格的脚本,它看起来不错。我确实注意到它是用创建的,ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]尽管我不确定会产生什么效果。

有谁知道这里可能会发生什么,更重要的是我如何解决它?

这是用于创建数据库的代码,以及插入命令

CREATE DATABASE MyBigDB;
GO
USE [MyBigDB]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[Autogenerated table with really big data](
    [Primary_key] [uniqueidentifier] NULL,
    [A Foreign key] [uniqueidentifier] NULL,
    [Created] [datetime] NULL,
    [Updated] [datetime] NULL, …
Run Code Online (Sandbox Code Playgroud)

sql-server-2012 varbinary

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

为什么我的数据库连接失败?

最近我使用 SQL Server 2012 开发了软件。现在当我尝试连接时,我收到此错误消息:

无法连接到 AAFI\SQLEXPRESS

与 SQL Server 建立连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:SQL 网络接口,错误:26 – 错误定位服务器/指定的实例)

sql-server sql-server-2012 connectivity

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

始终以特定顺序获取 3 条记录

我有一个查询,可以获取 3 本书(ABC1、ABC2、ABC3)及其详细信息。我需要它们按特定顺序进行旋转,因此我有一个相同的行号列。人们不读/一些/所有的书。

桌子:

StudentID|||BookName|||RowNumber
1000|||ABC1|||27
1000|||ABC2|||31
1000|||ABC3|||28
1005|||ABC2|||28
1005|||ABC3|||20
1005|||ABC1|||25
1006|||ABC1|||12
1006|||ABC2|||14
1006|||ABC3|||15
Run Code Online (Sandbox Code Playgroud)

所以我的数据会像上面那样。我需要为每个学生,ABC1,ABC2,ABC3 应该按顺序和 Rownumber 按降序更新。所以对于学生 1000:

ABC1||27,ABC2||28,ABC3||31
Run Code Online (Sandbox Code Playgroud)

对于学生 1005:

ABC1||20,ABC2||25,ABC3||28
Run Code Online (Sandbox Code Playgroud)

对于 1006:没有变化(它们的顺序已经正确)。

我将上述所有数据放入一个临时表中,并将主数据放入另一个临时表中。我正在尝试编写更新语句,但没有按预期工作。我需要帮助。

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

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

从非聚集索引定义中排除聚集键列

正如我读过的书签或非聚集索引对表聚集索引的引用是聚集索引键本身。在我参加的SQL 星期六活动中,一位讲师说从非聚集索引键定义和包含子句中排除聚集键列始终是一个好习惯。

我想知道这样做是否有任何负面影响,对于以下情况:

  1. Table A有以下栏目:RecordIDQuestionIDPtsPtsOf和许多其他。
  2. 我创建了一个像这样的非聚集索引:

    CREATE NONCLUSTERED INDEX [IX_TableA_RecordID_QuestionID] ON [dbo].[TableA]
    (
        [RecordID] ASC
       ,[QuestionID] ASC
    )INCLUDE ([Pts],[PtsOf]);
    
    Run Code Online (Sandbox Code Playgroud)

    为了在按记录和问题计算分数时跳过阅读聚集索引。该[RecordID][QuestionID]对是聚集索引键。

如果我像这样更改索引:

CREATE NONCLUSTERED INDEX [IX_TableA_RecordID_QuestionID] ON [dbo].[TableA]
(
    [Pts] ASC
   ,[PtsOf] ASC
);
Run Code Online (Sandbox Code Playgroud)

即使对于不引用点列的查询,索引也会像以前一样使用(它满足搜索条件):

SELECT [RecordID]
      ,[QuestionID]
FROM [dbo].[TableA];

SELECT [RecordID]
FROM [dbo].[TableA];

SELECT [QuestionID]
FROM [dbo].[TableA];
Run Code Online (Sandbox Code Playgroud)

因此,引擎足够聪明,可以看到使用非聚集索引会减少读取次数,我知道将其保留为原始定义也有效,但是有些索引非常大,我认为删除一些键可以减小它们的大小。

我担心的是第一个索引行是按书签排序的,现在不是。我想知道这是否以及如何会损害性能?

index sql-server sql-server-2012 sql-server-2014

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

当您可以执行 COPY_ONLY 时,为什么要进行完整备份?

对于 SQL Server 2012 可用性组,您只能COPY_ONLY对副本进行完整备份。您可以定期制作BACKUP LOG.

由于可以在从COPY_ONLY转储恢复数据库后恢复日志备份,我们真的需要进行完整(非COPY_ONLY)备份吗?

是的,它创建了一个新的 LSN 序列,但如果我们不做DIFFERENTIAL备份,我们需要考虑一下吗?

通过仅使用COPY_ONLY备份,我希望能够在只读副本上执行所有备份。我的 AG 是异步的,因此备份可能在主服务器之后,但这是可以接受的风险。

我做日志备份。根据我的测试,COPY_ONLY只要日志备份 LSN 比完整备份更新,我就能够恢复数据库上的任何日志备份(无论是否从 a 恢复)。完整备份会更改database_backup_lsnCOPY_ONLY不会更改,但似乎不会影响日志还原。似乎我无法恢复 DIF 备份,但我不需要那个。

dba.se Q&A里面有很好的解释:

SQL Server 2008 R2 使用事务日志还原 COPY_ONLY 完整备份

...但它没有回答我的问题。目前,我的结论是:除了第一次备份(没有它您将无法进行日志备份),COPY_ONLY如果我们不使用差异,我们只能使用备份。

我的(一般)问题是:COPY_ONLY如果我们不采取差异,我们是否真的需要非备份,如果是,为什么?

sql-server backup sql-server-2012 availability-groups

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