我正在将一个 SQL 表/列中的值插入到另一个中。由于其他原因,这些列的数据类型不同,但我不明白为什么 nvarchar(10) 源和 char(10) 目标有时会在 SQL Server 2014 中导致错误:
字符串或二进制数据将被截断。
len(sourcecol) = 10 和 datalength(sourcecol) = 20。
可能是因为 nvarchar 类型的源列中存储了一些不可见的空格/字符?
我有一个有趣的情况。我使用带有 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) 我创建了服务器范围 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
我刚刚发现,该master数据库包含一些其他数据库的表和存储过程的重复项。
例如,我有一个SomeDB包含表的数据库justTable。出于某种原因,该表的副本master也在其中,但没有数据。
这怎么可能?我敢肯定,在创建这些表和过程时,我使用的是相应的数据库,而不是master. 它们都存在于这些数据库中(它们应该存在),只是还有一个副本master。
我使用 Microsoft SQL Server Management Studio 2014 和 Redgate 添加(源代码控制和东西)。
我有一张这样的表:
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) 我正在处理我们通过夜间开始时间和夜间结束时间的程序,我需要在这些时间之间获取日志。
所以:
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) 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 …
长话短说,我们在www.hostforlife.eu上有一个托管计划(顺便说一句,即使是更昂贵的套餐,服务也很糟糕,而且他们丢失了服务器上的所有文件,我们不得不恢复我们的备份,因为他们也丢失了这些文件)和 db备份我们正在开票,所以他们会为我们手动取票。
当我们移动到另一台主机(hostforlife 的计划已过期)并尝试恢复 SQL Server 2014 备份时,我们无法做到(实际上是我们的主机)。
备份没有扩展名,我们不确定它是什么类型的备份(尝试了几种方法但没有奏效)。
我们为此联系了他们的支持,但因为我们没有积极的计划,他们甚至拒绝告诉我们备份是如何进行的。
我们可以支付 3 个月的托管费用,但我不想再给这家蹩脚的公司更多的钱。
所以,我的问题是,我们如何识别备份类型来恢复它?
我有一个数据库,由于一些愚蠢的代码问题,它已经大大增长。它现在是 24GB,其中大部分是非常不必要的日志信息(系统生成的调试信息)。
我的服务器位于云托管服务器上。由于文件大小,我现在有两个问题:
我支付存储费用。我很高兴为我的核心业务付费,但为愚蠢的数据付费似乎......
我的备份现在也很大。我每晚进行完整备份,然后将它们发送到 FTP 服务器。这个过程需要的时间越来越长。
鉴于我的问题,萎缩有那么糟糕吗?我将重建我所有的索引。我做了一次试运行,并将我的数据库降低到 6GB。
这家伙(谁我一直信任我的SQL大师)表示,它的坏.... mkay “SQL SERVER -收缩数据库是坏的-提高了碎裂-降低性能”
我遇到了数据库性能问题,因此我们重建了所有索引,因为我们在维护它们方面做得并不好。重建运行了大约 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 …
sql-server ×10
sql-server-2014 ×10
backup ×1
collation ×1
encoding ×1
index ×1
index-tuning ×1
performance ×1
shrink ×1
unicode ×1