假设不使用 ORDER BY 子句,在实例化表并用连续插入填充表的 TABLE 值函数中,插入顺序是否具有确定性?
我需要查看发送给我们的给定数据集中使用的 Unicode 字符范围,以便弄清楚为什么 SSMS 中的查询结果中的某些空格(或者至少在眼睛看来是空格)没有被使用。在某些解析例程中,其行为类似于 char(32)。因此,我编写了一个快速而肮脏的函数,将相关列中的字符串值转换为一组可以查询的元组:
create function [foo].[AllChars]
(@in nvarchar(max))
returns @t TABLE (c nchar(1))
as
begin
declare @i int;
while len(@in)>0
begin
insert @t(c) values (left(@in,1));
set @in = substring(@in, 2, len(@in)-1)
end
return;
end
Run Code Online (Sandbox Code Playgroud)
可以这样称呼:
select X.c theChar, unicode(X.c) uValue
from myTable T
cross apply foo.AllChars(T.myCol) X
Run Code Online (Sandbox Code Playgroud)
并将为myTable中的每一行返回一组元组:
t 116
h 104
e 101
32
c 99
a 97
t 116
10 <= culprit
i 105
n 110
32 …Run Code Online (Sandbox Code Playgroud) sql-server determinism t-sql set-returning-functions non-deterministic
由于我的组织内设置了优先级,我需要用空字符串替换某些列(大约 15-20)中的 NULL 值。虽然该解决方案在更传统的语言中很容易出现,但我正在努力解决如何在 T-SQL 中执行此操作。有人能指出我正确的方向吗?非常感激。
问题是关于 MySQL InnoDB 表中同时 SELECT 和 UPDATE 的行为:
我们有一个相对较大的表,我们定期扫描读取多个字段,包括名为 LastUpdate 的字段。在扫描期间,我们更新先前扫描的行。更新在后台线程中批处理和执行 - 使用不同的连接。需要注意的是,我们更新已读取的行。
三个问题:
SELECT它仍在进行中?READ-UNCOMMITTED用于SELECT帮助吗?我正在拼命寻找一些逻辑或脚本来检查命令,msrepl_commands其中已经移动到订阅者但尚未删除的命令数量。
我正在手动运行该程序:
EXEC dbo.sp_MSdistribution_cleanup @min_distretention = 0, @max_distretention = 72
Run Code Online (Sandbox Code Playgroud)
但它没有删除任何行,即使我检查msrepl_commands并发现有 20M 行都出现在 2016-08-30 00:01:00 AM 和 2016-08-31 09:00:00 AM 之间,但是如果我运行分发清理然后它应该在循环中删除前 10K,直到行数达到 2000。
我对如何检查那些传递的命令感到有些困惑(msdistribution_status给了我分散的和未分散的命令,但这是累积的,我需要当前状态)。
我创建了一个临时表,它位于临时表文件夹中。问题是名称太长了,这使得几乎不可能有效地查询某些字段。有什么办法可以用更短的名字db.#SPR1代替下面的长名字吗?
dbo.#SPR1_______________________________________________________________________________________________________________000000003A3E
我的机器上安装了多个版本的 SSMS。我们有运行多个版本的 SQL Server 的旧服务器,主要是 2008、2012 和 2014。我一直使用 SQLCMD,但它似乎默认为该命令的 Version 10 版本。
C:\Program Files\Microsoft SQL Server\100\Tools\Binn
对于某些未启用向后兼容性的新服务器,我需要使用较新版本中的那个。
C:\Program Files\Microsoft SQL Server\110\Tools\Binn
我需要更改哪些设置,以便每次我想使用 SQLCMD 时都不必使用完整路径?
我们在 Windows 和 Linux 系统上使用 DB2 LUW 10.5 和 11.1,以防它与他的答案相关。
问题:是否有时间使用 4K 而不是 32K 是正确的?如果是这样,为什么?(当它可以使用时它的性能会更好吗?)或者,它只是史前时代的遗留附属物,当时 4K 只是页面大小?
背景:当我创建 DB2 数据库时,我总是只创建 4K、8K、16K 和 32K 表空间和关联的缓冲池。
我的经理在这方面向我提出挑战。(对他有好处 - 我应该知道这一点!)他认为我们应该创建一个 32K 的表空间并完成它。
我找不到任何告诉我的信息,例如,当行大小允许时,我们应该使用 4K 而不是 32K,因为 XYZ。它告诉我,我CAN做到这一点,但不是说/我应该在何时。
我试图将数据库(.mdf和.ldf文件)移动到托管 SQL 服务器的同一台服务器上的不同目录。我按照此问答中的以下步骤操作:
ALTER DATABASE MyDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE MyDB SET OFFLINE
ALTER DATABASE MyDB MODIFY FILE (Name = MyDB, Filename = 'N:\DATA\MyDB.MDF')
ALTER DATABASE MyDB SET ONLINE
ALTER DATABASE MyDB SET MULTI_USER
当我到达 Step4 时,我收到“拒绝访问”。不幸的是,我的维护窗口很短,没有时间进行故障排除。所以我决定删除数据库并使用WITH MOVE子句恢复它以将 DB 文件放在正确的目录中。没有任何问题。
我的问题是为什么我收到“拒绝访问”?我没有更改 MSSQL 服务帐户。这是运行RESTORE.
我在捕获 SQLSTATE 和 SQLCODE 的过程中添加了一个 EXIT 处理程序,甚至找到了获取过程名称的方法,但我还需要知道错误发生的位置。建议非常感谢。
declare EXIT handler for SQLEXCEPTION
begin
select sysibm.routine_specific_name, SQLSTATE, SQLCODE
into v_sp_name, v_sqlstate, v_sqlcode
from sysibm.sysdummy1;
call dbms_output.put_line('Error in '||v_sp_name ' ['||v_sqlstate, v_sqlcode||']');
end;
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用此查询从 sql-server 获取死锁信息
select XEventData.XEvent.value('(data/value)[1]', 'varchar(max)') as DeadlockGraph
FROM
(select CAST(target_data as xml) as TargetData
from sys.dm_xe_session_targets st
join sys.dm_xe_sessions s on s.address = st.event_session_address
where name = 'system_health') AS Data
CROSS APPLY TargetData.nodes ('//RingBufferTarget/event') AS XEventData (XEvent)
where XEventData.XEvent.value('@name', 'varchar(4000)') = 'xml_deadlock_report'
Run Code Online (Sandbox Code Playgroud)
然而,查询需要永远并返回一个空结果。
为什么需要这么长时间,并且您从该视图中获得的死锁信息是否具有追溯力,以便我能够查明前段时间发生的死锁?
sql-server ×7
db2 ×2
db2-luw ×2
t-sql ×2
command-line ×1
deadlock ×1
debugging ×1
determinism ×1
exception ×1
innodb ×1
mysql ×1
performance ×1
replication ×1
sqlcmd ×1
tablespaces ×1