我不得不处理的最令人困惑的问题之一与存储过程组有关。给定一个存储过程 ,usp_DoSomethingAwesome
我可以通过调用它在另一个组中创建该过程usp_DoSomethingAwesome;2
。
我在解决一些由系统生成的插入、更新和删除复制存储过程引起的复制问题(发布者:SQL 2000 Ent.,Dist/Sub:2008 R2 Ent.)时发现了这一点。
拥有这种“分组”能力的目的/想法是什么?
我意识到我的公司使用 ELT(提取-加载-转换)流程而不是使用 ETL(提取-转换-加载)流程。
这两种方法有什么区别,在哪些情况下一种会比另一种“更好”?如果您能提供一些示例,那就太好了。
鉴于字符串:
'我认为 PostgreSQL 很漂亮'
我想对该字符串中找到的单个单词进行操作。本质上,我有一个单独的,我可以从中获取单词详细信息,并希望在此字典上加入该字符串的未嵌套数组。
到目前为止,我有:
select word, meaning, partofspeech
from unnest(string_to_array('I think that PostgreSQL is nifty',' ')) as word
from table t
join dictionary d
on t.word = d.wordname;
Run Code Online (Sandbox Code Playgroud)
这完成了我希望做的事情的基本原理,但它没有保留原始的词序。
我正在为大表测试不同的体系结构,我看到的一个建议是使用分区视图,将大表分解为一系列较小的“分区”表。
在测试这种方法时,我发现了一些对我来说没有多大意义的东西。当我过滤事实视图上的“分区列”时,优化器只查找相关表。此外,如果我过滤维度表上的那一列,优化器会消除不必要的表。
但是,如果我过滤维度的其他方面,优化器会在每个基表的 PK/CI 上寻找。
以下是相关查询:
select
od.[Year],
AvgValue = avg(ObservationValue)
from dbo.v_Observation o
join dbo.ObservationDates od
on o.ObservationDateKey = od.DateKey
where o.ObservationDateKey >= 20000101
and o.ObservationDateKey <= 20051231
group by od.[Year];
select
od.[Year],
AvgValue = avg(ObservationValue)
from dbo.v_Observation o
join dbo.ObservationDates od
on o.ObservationDateKey = od.DateKey
where od.DateKey >= 20000101
and od.DateKey <= 20051231
group by od.[Year];
select
od.[Year],
AvgValue = avg(ObservationValue)
from dbo.v_Observation o
join dbo.ObservationDates od
on o.ObservationDateKey = od.DateKey …
Run Code Online (Sandbox Code Playgroud) 我正在对性能不佳的存储过程的点点滴滴进行故障排除。程序的这一部分抛出了一个 NO JOIN PREDICATE 警告
select
method =
case methoddescription
when 'blah' then 'Ethylene Oxide'
when NULL then 'N/A'
else methoddescription
end,
testmethod =
case methoddescription
when 'blah' then 'Biological Indicators'
when NULL then 'N/A'
else 'Dosimeter Reports'
end,
result =
case when l.res is null or l.res <> 1 then 'Failed'
else 'Passed'
end,
datecomplete = COALESCE(CONVERT(varchar(10), NULL, 101),'N/A')
from db2.dbo.view ls
join db1.dbo.table l
on ls.id = l.id
where item = '19003'
and l.id = '732820'
Run Code Online (Sandbox Code Playgroud)
视图 ( …
我即将着手将数据库文件迁移到新的 SAN(从旧的 SAN),并且我有几个选项可以实现这一点。(1) 有人建议我调查将完整备份恢复到服务器上新数据库的工作量。但是,(2) 我最初的计划是通过分离然后重新附加数据库将文件从旧 SAN 复制到新 SAN。
我的直觉告诉我,我宁愿分离、复制和附加,因为它看起来更安全,但这可能只是我的天真。我不想在重命名数据库的过程中错过事务或以某种方式“破坏某些东西”。
我想我的问题是我对 BACKUP-RESTORE-Replay 选项的怀疑是否合理,以及该选项的其他优点或风险是什么?
除非我误解了列的用途,否则以下代码表明聚集索引结构的更改不会更改sys.stats_columns DMV 中stats_column_id
列的序数位置 ( ) 。(在 AdventureWorks2014、AdventureWorks2008R2 中测试)
select i.name, c.name, ic.column_id, ic.index_column_id
from sys.indexes i
join sys.index_columns ic
on i.object_id = ic.object_id
and i.index_id = ic.index_id
join sys.columns c
on i.object_id = c.object_id
and ic.column_id = c.column_id
where i.name = 'PK_BusinessEntityAddress_BusinessEntityID_AddressID_AddressTypeID'
order by ic.key_ordinal;
select sh.name,s.name, c.name, c.column_id, sc.column_id, sc.stats_column_id
from sys.stats s
join sys.stats_columns sc
on s.object_id = sc.object_id
and s.stats_id = sc.stats_id
join sys.columns c
on s.object_id = c.object_id
and sc.column_id = c.column_id
join …
Run Code Online (Sandbox Code Playgroud) 我有一个开发环境,它正在快速部署到生产环境中,并且在日志中注意到大约每 20 秒我就会看到一条消息:
Starting up database 'dbname'
CHECKDB for database 'dbname' finished without errors
Run Code Online (Sandbox Code Playgroud)
我注意到这一点是因为正在测试它的最终用户有一个问题,我将其与我在 Windows 事件日志(应用程序日志)中注意到的错误隔离开来:
The log for database 'dbname' is not available. Check event log for related messages.
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我没有发现相关消息,但通过离线/在线循环解决了。
我唯一能想到的是,这个应用程序每 1 毫秒收集一次数据,但所有这些数据都没有插入到数据库中。作为一个开发服务器,它被配置为日志和数据在同一个驱动器上。考虑到这两条信息,我倾向于这是一个 IO 问题,并且服务器正试图从与存储 (SAN) 的连接丢失中恢复。然而,即使这对我来说也没有意义,因为它并没有丢失所有 dbs,只是丢失了这个。还有什么可能导致这种情况?
平台:Windows Server 2008 R2 (Std.) 上的 SQL Server 2008 R2 (Ent.)
我希望能够详细了解哪些数据库文件包含数据库中各种 HoBT(对齐和非对齐)的分配单元。
在我们开始为每个文件组创建多个数据文件之前,我一直使用的查询(见下文)一直对我有用,我只能弄清楚如何获得与文件组级别一样的细粒度。
select
SchemaName = sh.name,
TableName = t.name,
IndexName = i.name,
PartitionNumber = p.partition_number,
IndexID = i.index_id,
IndexDataspaceID = i.data_space_id,
AllocUnitDataspaceID = au.data_space_id,
PartitionRows = p.rows
from sys.allocation_units au
join sys.partitions p
on au.container_id = p.partition_id
join sys.indexes i
on i.object_id = p.object_id
and i.index_id = p.index_id
join sys.tables t
on p.object_id = t.object_id
join sys.schemas sh
on t.schema_id = sh.schema_id
where sh.name != 'sys'
and au.type = 2
union all
select
sh.name,
t.name,
i.name,
p.partition_number,
i.index_id,
i.data_space_id, …
Run Code Online (Sandbox Code Playgroud) sql-server ×8
array ×1
compression ×1
dmv ×1
etl ×1
filegroups ×1
metadata ×1
migration ×1
parse ×1
partitioning ×1
postgresql ×1
record ×1
row ×1
sorting ×1
statistics ×1
terminology ×1
warning ×1