我正在尝试使用 3rd 方 SAP 附加组件帮助客户,该附加组件有发布故障并且已停止支持。
在某些情况下,它会将发帖队列表中未完成的帖子归档到发帖存档表。我需要将这些存档的结果移回队列中。
队列 ID 是一个身份列,我想保持不变。
问题是,如果我执行 identity_insert on/insert/identity_insert off,对于创建队列条目并期望自动生成标识列的进程的并发性,我可以期待什么?
任何有关演示此类行为的最佳方式的指针也将不胜感激。
给定一个 SourceTable 和一个 TargetTable,我想以编程方式创建一个需要所有连接的字符串。
简而言之,我试图找到一种方法来创建这样的字符串:
FROM SourceTable t
JOIN IntermediateTable t1 on t1.keycolumn = t.keycolumn
JOIN TargetTable t2 on t2.keycolumn = t1.keycolumn
Run Code Online (Sandbox Code Playgroud)
我有一个查询返回给定表的所有外键,但是在尝试递归运行所有这些以找到最佳连接路径并生成字符串时遇到了限制。
SELECT
p.name AS ParentTable
,pc.name AS ParentColumn
,r.name AS ChildTable
,rc.name AS ChildColumn
FROM sys.foreign_key_columns fk
JOIN sys.columns pc ON pc.object_id = fk.parent_object_id AND pc.column_id = fk.parent_column_id
JOIN sys.columns rc ON rc.object_id = fk.referenced_object_id AND rc.column_id = fk.referenced_column_id
JOIN sys.tables p ON p.object_id = fk.parent_object_id
JOIN sys.tables r ON r.object_id = fk.referenced_object_id
WHERE fk.parent_object_id = OBJECT_ID('aTable')
ORDER …Run Code Online (Sandbox Code Playgroud) 我正在尝试估计中央数据库服务器的空间需求,该服务器将从大约 200 个相同的现场数据库中收集数据。我有每个表的平均每日行数,现在需要估计每个表的行大小,包括索引。
是否存在这样的动物,还是我需要自己动手?如果我确实需要自己动手,你能提出一个好的方法吗?
TIA
有没有什么好方法可以做以下事情?
SQLCMD -S %SERVER% -E -Q "BEGIN TRANSACTION"
FOR %%f in (script1 script2 script3) do (
SET CURRENT_SCRIPT=%%f
SQLCMD -S Localhost -E -b -V 1 -i %%f.sql -o %%f.log
IF !ERRORLEVEL! NEQ 0 GOTO ERROR
SET CURRENT_SCRIPT=
)
SQLCMD -S %SERVER% -E -Q "COMMIT TRANSACTION"
Run Code Online (Sandbox Code Playgroud) 我正在为单独数据库中的视图创建多个代理视图。为了避免在两个地方定义视图,我想使用 SELECT * 创建代理视图。
我一直在寻找不这样做的原因,但没有找到。有人对使用 SELECT * 进行视图定义有意见吗?
我正在使用具有许多跨数据库视图的数据库。虽然 INFORMATION_SCHEMA.VIEWS 列出了所有这些视图,但 INFORMATION_SCHEMA.VIEW_TABLE_USAGE 和 INFORMATION_SCHEMA.VIEW_COLUMN_USAGE 没有。
所有有问题的视图都采用以下格式:
CREATE VIEW [dbo].[Invoice]
AS SELECT * FROM [otherdb].[dbo].[Invoice]
Run Code Online (Sandbox Code Playgroud)
以下查询返回 0 行:
SELECT
VIEW_CATALOG
,VIEW_SCHEMA
,VIEW_NAME
FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
WHERE TABLE_CATALOG <> VIEW_CATALOG
Run Code Online (Sandbox Code Playgroud)
将 SELECT * 的适当性留给另一个讨论,为什么外部数据库引用不在 INFORMATION_SCHEMA 视图中,有什么方法可以获取它们?
执行此查询(匿名)大约需要 2 分钟。
SELECT
ly.Col1
,sr.Col2
,sr.Col3
,sr.Col4
INTO TempDb..TempLYT
FROM Tempdb..T1 ly
JOIN TempDb..T2 sr on sr.[DateTimeCol] BETWEEN ly.DateTimeStart and ly.DateTimeEnd
WHERE sr.Col5 = 1 OR sr.Col5 = 2
Run Code Online (Sandbox Code Playgroud)
是否有一些替代方案可以帮助解决此查询?
应用 Paul White 建议的索引后,查询计划如下所示:
下面的查询,对一个大约 600 万行的表运行需要 25 秒。当我删除最终订单时,它会在 3 秒内运行。表上没有索引(它是一个中间 SSIS ETL 目标,后来被拉入 DW。)
它不是缓存。我以任何顺序多次运行它,结果一致。
查询本身会检查序列号中的差距。SSIS 将使用它来查看是否需要重新获取任何内容。
;with edges as
(
select
ROW_NUMBER() over (partition by s1.SiteIDNumber order by s1.SequenceNumber) as rn,
s1.SiteIDNumber,
s1.SequenceNumber
from TestPlay s1
left join TestPlay s2 on s2.SiteIDNumber = s1.SiteIDNumber and s2.SequenceNumber = s1.SequenceNumber + 1
left join TestPlay s3 on s3.SiteIDNumber = s1.SiteIDNumber and s3.SequenceNumber = s1.SequenceNumber - 1
where s2.SiteIDNumber is null
or s3.SiteIDNumber is null
),
gaps as
(
select
e.rn,
e.SiteIDNumber,
e.SequenceNumber + 1 …Run Code Online (Sandbox Code Playgroud) performance sql-server t-sql sql-server-2012 gaps-and-islands
如果 SQL Server 聚集索引是表的物理顺序,并且包含所有列,那么它是表本身吗?聚集索引是如何物理存储的?
我看过问答什么是聚集索引?但我的问题是关于这些的物理组织,而不是它们的功能。
尝试将 MSDB 恢复到替换服务器并收到以下消息:
消息 3168,级别 16,状态 1,第 4 行 设备 e:\sqlbackup\2024-02-27_msdb_DEV.bak 上的系统数据库备份无法还原,因为它是由不同版本的服务器创建的 ( 15.00.4335)比该服务器(15.00.4355)。消息 3013,级别 16,状态 1,第 4 行 RESTORE DATABASE 异常终止。
sql-server ×10
performance ×2
identity ×1
insert ×1
msdb ×1
recursive ×1
sqlcmd ×1
t-sql ×1
transaction ×1
view ×1