小编mus*_*cio的帖子

表值函数对于插入顺序是否具有确定性?

假设不使用 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

4
推荐指数
1
解决办法
712
查看次数

用空字符串替换 NULL

由于我的组织内设置了优先级,我需要用空字符串替换某些列(大约 15-20)中的 NULL 值。虽然该解决方案在更传统的语言中很容易出现,但我正在努力解决如何在 T-SQL 中执行此操作。有人能指出我正确的方向吗?非常感激。

sql-server

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

MySQL MVCC 实现

问题是关于 MySQL InnoDB 表中同时 SELECT 和 UPDATE 的行为:

我们有一个相对较大的表,我们定期扫描读取多个字段,包括名为 LastUpdate 的字段。在扫描期间,我们更新先前扫描的行。更新在后台线程中批处理和执行 - 使用不同的连接。需要注意的是,我们更新已读取的行。

三个问题:

  1. InnoDB 是否会保存更新行的先前版本,因为SELECT它仍在进行中?
  2. READ-UNCOMMITTED用于SELECT帮助吗?
  3. 如何确认 InnoDB 在其重做日志中保存或不保存修改行的先前版本。

mysql innodb isolation-level

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

Msrel_commands 表有 20M 行

我正在拼命寻找一些逻辑或脚本来检查命令,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给了我分散的和未分散的命令,但这是累积的,我需要当前状态)。

replication sql-server sql-server-2014

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

临时表的名称

我创建了一个临时表,它位于临时表文件夹中。问题是名称太长了,这使得几乎不可能有效地查询某些字段。有什么办法可以用更短的名字db.#SPR1代替下面的长名字吗?

dbo.#SPR1_______________________________________________________________________________________________________________000000003A3E

sql-server temporary-tables

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

如何强制 Windows 使用特定版本的 SQLCMD?

我的机器上安装了多个版本的 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 时都不必使用完整路径?

sql-server command-line sqlcmd

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

在 DB2 LUW 中,我什么时候应该使用 4K、8K 或 16K 表空间,而不是仅仅创建一个 32K 表空间并完成它?

我们在 Windows 和 Linux 系统上使用 DB2 LUW 10.5 和 11.1,以防它与他的答案相关。

问题:是否有时间使用 4K 而不是 32K 是正确的?如果是这样,为什么?(当它可以使用时它的性能会更好吗?)或者,它只是史前时代的遗留附属物,当时 4K 只是页面大小?

背景:当我创建 DB2 数据库时,我总是只创建 4K、8K、16K 和 32K 表空间和关联的缓冲池。

我的经理在这方面向我提出挑战。(对他有好处 - 我应该知道这一点!)他认为我们应该创建一个 32K 的表空间并完成它。

我找不到任何告诉我的信息,例如,当行大小允许时,我们应该使用 4K 而不是 32K,因为 XYZ。它告诉我,我CAN做到这一点,但不是说/我应该在何时。

performance db2 tablespaces db2-luw

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

将 SQL Server 数据库文件移动到新位置 - 为什么权限错误?

我试图将数据库(.mdf.ldf文件)移动到托管 SQL 服务器的同一台服务器上的不同目录。我按照此问答中的以下步骤操作:

  1. ALTER DATABASE MyDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE

  2. ALTER DATABASE MyDB SET OFFLINE

  3. ALTER DATABASE MyDB MODIFY FILE (Name = MyDB, Filename = 'N:\DATA\MyDB.MDF')

  4. ALTER DATABASE MyDB SET ONLINE

  5. ALTER DATABASE MyDB SET MULTI_USER

当我到达 Step4 时,我收到“拒绝访问”。不幸的是,我的维护窗口很短,没有时间进行故障排除。所以我决定删除数据库并使用WITH MOVE子句恢复它以将 DB 文件放在正确的目录中。没有任何问题。

我的问题是为什么我收到“拒绝访问”?我没有更改 MSSQL 服务帐户。这是运行RESTORE.

sql-server t-sql

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

显示 DB2 存储过程中发生错误的行号

我在捕获 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)

db2 stored-procedures debugging exception db2-luw

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

无法运行查询以及时获取死锁图

我正在尝试使用此查询从 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 deadlock

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