标签: sql-server-2014

将 nvarchar(10) 复制到 char(10) 时出现“字符串或二进制数据将被截断”错误

我正在将一个 SQL 表/列中的值插入到另一个中。由于其他原因,这些列的数据类型不同,但我不明白为什么 nvarchar(10) 源和 char(10) 目标有时会在 SQL Server 2014 中导致错误:

字符串或二进制数据将被截断。

len(sourcecol) = 10 和 datalength(sourcecol) = 20。

可能是因为 nvarchar 类型的源列中存储了一些不可见的空格/字符?

sql-server collation encoding sql-server-2014 unicode

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

查询计划错误

我有一个有趣的情况。我使用带有 SP1 的 SQL2014 企业版。以下查询会产生错误消息:

查询处理器耗尽了内部资源,无法生成查询计划。这是一种罕见的事件,仅适用于极其复杂的查询或引用大量表或分区的查询。请简化查询。如果您认为自己错误地收到了此消息,请联系客户支持服务以获取更多信息。

查询在没有插入语句的情况下运行良好。如果我交换 where 子句,查询也会运行,比如在exists 语句[step] = 1之后的exists 语句[step] = 3。实际上 SQL 是动态生成的,因此交换 where 子句中的顺序对我来说不是解决方案。这在 SQL 2008 和 SQL 2012 中运行良好。

推荐针对此问题的任何想法/解决方案,我感谢您的时间和精力。

insert into tblPatientConditions (
    cmrn_id
    ,metricmnemonic
    ,metricname
    ,status
    ,adddate
    )
select cmrn_id
    ,'PBLEHTN'
    ,'PossibleHTN'
    ,1
    ,Getdate()
from tblPatientInfo pers
where exists (
        select *
        from tblPatientDiagnosisCriteria
        where cmrn_id = pers.cmrn_id
            and metricname = 'PossibleHTN'
            and category = 'CLAIMS'
            and [step] = 1
            and testname = 'HTN'
        )
    and exists ( …
Run Code Online (Sandbox Code Playgroud)

performance sql-server sql-server-2014 query-performance

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

在内存表中使用 ddl 触发器

我创建了服务器范围 ddl 触发器来审核服务器上的用户活动。
现在,如果有人尝试创建内存表,该语句将失败并显示以下错误:

Error SQL72014: .Net SqlClient Data Provider: Msg 12332, Level 16, State 107,
Line 1 Database and server triggers on DDL statements DROP and CREATE are not
supported with memory optimized tables.
Run Code Online (Sandbox Code Playgroud)

我可以创建 ddl 触发器来忽略对内存表的操作吗?

sql-server in-memory-database sql-server-2014 memory-optimized-tables

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

master 数据库中的重复表和过程

我刚刚发现,该master数据库包含一些其他数据库的表和存储过程的重复项。

例如,我有一个SomeDB包含表的数据库justTable。出于某种原因,该表的副本master也在其中,但没有数据。

这怎么可能?我敢肯定,在创建这些表和过程时,我使用的是相应的数据库,而不是master. 它们都存在于这些数据库中(它们应该存在),只是还有一个副本master

我使用 Microsoft SQL Server Management Studio 2014 和 Redgate 添加(源代码控制和东西)。

sql-server sql-server-2014 master-system-database

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

仅选择 sum(column) > 0 的列

我有一张这样的表:

Date     Bob     Joe     Will
1/1/15    1       0        1
1/2/15    0       0        1
1/3/15    0       0        0
1/4/15    1       1        1
Run Code Online (Sandbox Code Playgroud)

首选方案

有了一个说法,我想回到列其中SUM(Column) > 0

例如:

SELECT SUM(Bob) as Robert, SUM(Joe) as Joseph, SUM(Will) as William
  FROM table
 WHERE Date BETWEEN '1/1/15' and '1/3/15'
Run Code Online (Sandbox Code Playgroud)

我希望我的结果看起来像这样:

Robert     William
  1           2
Run Code Online (Sandbox Code Playgroud)

换句话说,因为SUM(Joe) = 0对于我选择的日期范围,我不希望该列出Joseph现在结果集中。会导致Joseph不出现的魔法是什么?

替代解决方案

如果返回的数据略有不同,我可以处理它,所以我考虑编写一个表函数来返回一个 2 列表,如下所示:

Name        Value
Robert      1
William     2
Run Code Online (Sandbox Code Playgroud)

我的想法是函数代码看起来类似于:

--Declare table here
IF SELECT SUM(Bob) > 0 …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2014

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

查询以获取开始和结束夜间时间之间的日志

我正在处理我们通过夜间开始时间和夜间结束时间的程序,我需要在这些时间之间获取日志。

所以:

  • 如果是StartHour = 18and EndHour = 5,存储过程应该返回6:00 PM和之间的所有日志5:00 AM
  • 如果是StartHour = 1and EndHour = 5,存储过程应该返回1:00 AM和之间的所有日志5:00 AM

我尝试创建 SQL Fiddle,但在今天的 SQL Server 2014 或 SQL Server 2008 中创建小提琴似乎存在问题。

我正在使用 SQL SERVER 2014 - 但 Fiddle 在 MySQL 中

(我在 MySQL 中创建了一个来显示数据)[错误的小提琴:http ://sqlfiddle.com/#!9/6f0a6/1 ]

正确:http ://sqlfiddle.com/#!9/ 6467d8/3

这是我的脚本的样子:

Select 
    * 
FROM
(

    Select 
        iVehicleMonitoringId,
        dtUtcDateTime,
        HourPart = DATEPART(HOUR, dtUtcDateTime)
        From VehicleMonitoringLog vm

        Where vm.dtUTCDateTime …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2014

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

How to get difference in value over 15min interval?

I have this table:

在此处输入图片说明

The 2 important columns here are domainid and Soldtickets.

Soldtickets show how many tickets were sold today.

I make a call to my server and it tells me that I made the call at "2016-03-30 14:18:01.4130000" and that 0 tickets have been sold for the Domain with DomainId 53.

I am trying to figure out how I can find the difference.

I call the server every two minutes and I get data. I want to check …

sql-server sql-server-2014

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

确定 SQL Server 备份的类型

长话短说,我们在www.hostforlife.eu上有一个托管计划(顺便说一句,即使是更昂贵的套餐,服务也很糟糕,而且他们丢失了服务器上的所有文件,我们不得不恢复我们的备份,因为他们也丢失了这些文件)和 db备份我们正在开票,所以他们会为我们手动取票。

当我们移动到另一台主机(hostforlife 的计划已过期)并尝试恢复 SQL Server 2014 备份时,我们无法做到(实际上是我们的主机)。

备份没有扩展名,我们不确定它是什么类型的备份(尝试了几种方法但没有奏效)。

我们为此联系了他们的支持,但因为我们没有积极的计划,他们甚至拒绝告诉我们备份是如何进行的。

我们可以支付 3 个月的托管费用,但我不想再给这家蹩脚的公司更多的钱。

所以,我的问题是,我们如何识别备份类型来恢复它?

sql-server backup sql-server-2014

3
推荐指数
2
解决办法
6357
查看次数

缩小 sql 数据库 - 坏主意?

我有一个数据库,由于一些愚蠢的代码问题,它已经大大增长。它现在是 24GB,其中大部分是非常不必要的日志信息(系统生成的调试信息)。

我的服务器位于云托管服务器上。由于文件大小,我现在有两个问题:

  1. 我支付存储费用。我很高兴为我的核心业务付费,但为愚蠢的数据付费似乎......

  2. 我的备份现在也很大。我每晚进行完整备份,然后将它们发送到 FTP 服务器。这个过程需要的时间越来越长。

鉴于我的问题,萎缩有那么糟糕吗?我将重建我所​​有的索引。我做了一次试运行,并将我的数据库降低到 6GB。

这家伙(谁我一直信任我的SQL大师)表示,它的坏.... mkay “SQL SERVER -收缩数据库是坏的-提高了碎裂-降低性能”

sql-server shrink database-size sql-server-2014

3
推荐指数
2
解决办法
1440
查看次数

100% 索引碎片化

我遇到了数据库性能问题,因此我们重建了所有索引,因为我们在维护它们方面做得并不好。重建运行了大约 20 分钟。然后我找到了一个查询来查看我的索引的外观

SELECT 
t.NAME 'Table name',
i.NAME 'Index name',
ips.index_type_desc,
ips.alloc_unit_type_desc,
ips.index_depth,
ips.index_level,
ips.avg_fragmentation_in_percent,
ips.fragment_count,
ips.avg_fragment_size_in_pages,
ips.page_count,
ips.avg_page_space_used_in_percent,
ips.record_count,
ips.ghost_record_count,
ips.Version_ghost_record_count,
ips.min_record_size_in_bytes,
ips.max_record_size_in_bytes,
ips.avg_record_size_in_bytes,
ips.forwarded_record_count
FROM 
sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'DETAILED') ips
INNER JOIN  
sys.tables t ON ips.OBJECT_ID = t.Object_ID
INNER JOIN  
sys.indexes i ON ips.index_id = i.index_id AND ips.OBJECT_ID = i.object_id
WHERE
AVG_FRAGMENTATION_IN_PERCENT > 0.0
ORDER BY
AVG_FRAGMENTATION_IN_PERCENT, fragment_count
Run Code Online (Sandbox Code Playgroud)

所以我的大多数索引的平均碎片化百分比 <1 但我有大约 10 个是 85%,另外 10 个是 100%

我不是 dba,对我在这里所做的事情知之甚少,但这肯定很糟糕吗?

还值得注意的是,100% 都是主键

我是否陷入了困境,还是我对统计数据的理解不正确?

注意:值得一提的是我的数据库是 24GB,我的驱动器有 115GB 中的 46GB …

index sql-server index-tuning sql-server-2014

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