我正在使用Bluefeet 的这个很好的例子https://dba.stackexchange.com/a/25818/113298,来创建一个数据透视表并将其转换为 xml 数据。
声明参数
DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX);
Run Code Online (Sandbox Code Playgroud)
接下来有一个代码很多的CTE,CTE的最终结果放在一个临时数据库中(与示例中相同)
SELECT
B.[StayDate] -- this is a date dd-mm-yyyy
, B.[Guid]
INTO #tempDates
FROM BaseSelection B
Run Code Online (Sandbox Code Playgroud)
生成 cols(与示例相同)
SELECT @cols = STUFF((SELECT distinct ',' +QUOTENAME(convert(char(10), [StayDate] , 120))
FROM #tempDates
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'');
Run Code Online (Sandbox Code Playgroud)
结果集是我应该期望的
set @query =
'SELECT [Guid],' + @cols +'
FROM
(
SELECT
[StayDate]
,[Guid]
FROM #tempDates
) A
pivot
(
count([StayDate])
for [StayDate] in (' + @cols +')
) …Run Code Online (Sandbox Code Playgroud) 我有一个带有标识列的表,它也是一个主键。目前,它有 5000 万行,身份列的最高值是 148,921,803。该表有很多DELETEs 并INSERTS在其上执行,因此价值很高。
我们要将数据类型从 更改INT为BIGINT以准备添加更多行。请注意,没有对 PK 列的引用。
做到这一点的最佳方法是什么,停机时间最少?我有两个选择。
给定两个数字nand m,我想生成一系列的形式
1, 2, ..., (n-1), n, n, (n-1), ... 2, 1
Run Code Online (Sandbox Code Playgroud)
并重复它m几次。
例如,对于n = 3and m = 4,我想要以下 24 个数字的序列:
1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1
---------------- ---------------- ---------------- ----------------
Run Code Online (Sandbox Code Playgroud)
我知道如何通过以下两种方法之一在 PostgreSQL 中实现此结果:
使用以下查询,该查询使用该generate_series函数,以及一些确保订单正确的技巧:
WITH parameters (n, m) AS
(
VALUES (3, 5)
)
SELECT
xi
FROM
(
SELECT
i, i …Run Code Online (Sandbox Code Playgroud) 我使用跨数据库证书(如 Erland Sommarskog 所述)来控制对我环境中某个数据库的访问(SQL Server 2008 R2)。
我在数据库 A 中存储了更新数据库 B 中表的存储过程。直到现在,这一直适用于 db A 中的各种存储过程和 db B 中的表。我正在尝试更新 db B 中的表,但该表上有一个触发器。此触发器在 db B 的另一个表中插入其他数据。我收到错误消息:
消息 916,级别 14,状态 1,过程 table_trigger,第 11 行 服务器主体“sql\login”在当前安全上下文下无法访问数据库“B”。
我尝试为与证书绑定的数据库 B 用户授予插入权限以插入其他表,但它没有解决错误。除了更改触发器以使其使用之外,我还有其他选择WITH EXECUTE AS OWNER吗?
这是复制问题的 DDL:
CREATE LOGIN [GuggTest] WITH PASSWORD=N'abcd', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
CREATE DATABASE A;
CREATE DATABASE B;
USE A;
CREATE TABLE dbo.SPtoUpdate
(
ID INT
, ILoveFishing VARCHAR(255)
);
INSERT INTO dbo.SPtoUpdate
( ID , ILoveFishing )
VALUES ( …Run Code Online (Sandbox Code Playgroud) 在 Craig Freedman 的博客Nested Loops Join 中,他解释了为什么嵌套循环联接不能支持右外联接:
问题是我们多次扫描内表——外连接的每一行扫描一次。在这些多次扫描期间,我们可能会多次遇到相同的内部行。在什么时候我们可以得出结论,特定的内部行没有或不会加入?
有人可以用一种非常简单和有教育意义的方式解释一下吗?
这是否意味着循环从外表 ( R1) 开始并扫描内表 ( R2)?
我知道对于R1不与 连接的值,R2应将其替换为 aNULL以便结果集变为 ( NULL, R2)。对我来说,R2当R1不加入时似乎不可能返回一个值,因为它不知道R2要返回哪个值。但这不是它的解释方式。或者是吗?
SQL Server会在事实上优化(经常替换)RIGHT JOIN用LEFT JOIN,但问题是解释为什么它在技术上是不可能的NESTED LOOPS JOIN使用/支持RIGHT JOIN逻辑。
我在数据库中存储了 HTML 代码,我想将其作为 XML 读取。
我的代码:
http://rextester.com/RMEHO89992
这是我拥有的 HTML 代码示例:
<div>
<section>
<h4>
<span> A </span>
</h4>
<ul>
<li>
<span> Ab</span>
AD
<span> AC </span>
</li>
<li>
<span> Ag</span>
<span> AL </span>
</li>
</ul>
<h4>
<span> B </span>
</h4>
<ul>
<li>
<span> Bb</span>
BD
<span> BC </span>
</li>
<li>
<span> Bg</span>
<span> BL </span>
</li>
</ul>
</section>
</div>
Run Code Online (Sandbox Code Playgroud)
这是我需要的输出示例:
Category Selection Value
--------- --------- ------------
A Ab AD
A Ag AL
B Bb BD
B Bg BL
Run Code Online (Sandbox Code Playgroud)
我需要将<h4>标签内的值作为 …
我想检查我可以访问的 Datasase 服务器上正在运行什么类型的 sql。我只能访问 Web 界面和表格列表。
通过该界面,我可以对列表中的表运行查询。
如何获取有关服务器和服务器正在运行的版本的更多信息。我不知道服务器正在运行的 IP 或端口。
我想知道服务器是 MySQL、Mircosoft SQL Server、Oracle SQL、Postgre SQL 还是其他 sql server。
我正在谈论的网站是这个: w3schools.com SQL editor。
编辑 2:虽然对于某些命令 select sqlite_version() 对我有用,但它不起作用。这是响应的屏幕截图。
编辑 3:在 Chromium 浏览器上,命令工作正常。但是在 Firefox 浏览器上,该命令不起作用。
我还提到我正在运行 Linux。
您认为在 Firefox 和 Chrome 上我得到不同结果的原因可能是什么?
更新:这绝对是一个错误。有关完整详细信息,请参阅此连接项。
在测试sp_BlitzCache 的一些更改(完全公开,我是作者之一)时,我发现了我认为是我们代码中的错误。
在某一时刻,我们匹配查询计划哈希以获得查询成本。我们这样做:
statement.value('sum(/p:StmtSimple[xs:hexBinary(substring(@QueryHash, 3)) =
xs:hexBinary(sql:column("b.QueryHash"))]/@StatementSubTreeCost)', 'float')
Run Code Online (Sandbox Code Playgroud)
就我所见,这已经奏效了。然而,在一个奇怪的情况下,XML 中的子字符串抛出一个NULL值,并且计划显示成本为 0,尽管它相当高。
深入研究执行计划(完全公开,我为托管 Paste The Plan 的公司工作),我注意到一个问题哈希的查询计划哈希长度为 17 个字符,而其余为 18 个字符。以下是示例:
QueryPlanHash="0x4410B0CA640CDA89" QueryPlanHash="0x2262FEA4CE645569" QueryPlanHash="0xED4F225CC0E97E5" -- 问题! QueryPlanHash="0xBF878EEE6DB955EA" QueryPlanHash="0x263B53BC8C14A452" QueryPlanHash="0x89F5F146CF4B476F" QueryPlanHash="0xEF47EA40805C8961" QueryPlanHash="0xB7BE27D6E43677A5" QueryPlanHash="0x815C54EC43A6A6E9"
查询计划哈希上市为BINARY 8-想必这应该是相同的长度,但到底是什么像我这样的人了解二进制值?
稍微使用 XQuery,我发现通过将子字符串更改为从第二个位置开始,它会得出一个有效(尽管不正确)的哈希值。
WITH XMLNAMESPACES('http://schemas.microsoft.com/sqlserver/2004/07/showplan' AS p)
SELECT
QueryPlanCost = statement.value('sum(/p:StmtSimple/@StatementSubTreeCost)', 'float'),
**q.n.value('substring(@QueryPlanHash, 2)', 'BINARY(8)')**
FROM #statements s
CROSS APPLY s.statement.nodes('/p:StmtSimple') AS q(n)
OPTION(RECOMPILE);
WITH XMLNAMESPACES('http://schemas.microsoft.com/sqlserver/2004/07/showplan' AS p)
SELECT
QueryPlanCost = statement.value('sum(/p:StmtSimple/@StatementSubTreeCost)', 'float'),
**q.n.value('substring(@QueryPlanHash, …Run Code Online (Sandbox Code Playgroud) Microsoft 当前允许使用此语法。
SELECT *
FROM ( VALUES (1) ) AS g(x)
WHERE EXISTS (
SELECT *
FROM ( VALUES (1),(1) )
AS t(x)
WHERE g.x = t.x
HAVING count(*) > 1
);
Run Code Online (Sandbox Code Playgroud)
请注意,没有GROUP BY中EXISTS条款,是有效的ANSI SQL。或者它只是暴露了一个实现细节。
作为参考,PostgreSQL 中不允许使用相同的语法。
错误:列“tx”必须出现在 GROUP BY 子句中或用于聚合函数中
但是这种语法是允许的..
SELECT *
FROM ( VALUES (1) ) AS g(x)
WHERE EXISTS (
SELECT 1 -- This changed from the first query
FROM ( VALUES (1),(1) )
AS t(x)
WHERE g.x = t.x
HAVING count(*) …Run Code Online (Sandbox Code Playgroud) SQL Server 2016 中引入的新查询存储很棒。它很好地替代了我以前使用旧的 Profiler 工具所做的大部分工作。但是,我还没有找到一种方法来捕获与对它嗅出的高资源消耗查询的单个调用相关联的参数值。这可能吗?
我知道查询存储更多地处理聚合数据而不是单个调用,所以我怀疑我在这里可能不走运。当我发现一个缓慢的查询时,我发现将参数与其最慢的调用之一关联起来也很方便进行故障排除。我想知道如何使用最新最好的工具来做到这一点。(我不会错过使用 Profiler!)
在安全方面,查询存储比 Profiler 更容易锁定吗?我认为它需要从某个级别的单个调用中捕获数据才能计算聚合。只是不确定它是否存储了其中的任何一个。
performance sql-server sql-server-2016 query-store query-performance
sql-server ×10
postgresql ×3
xml ×3
t-sql ×2
certificate ×1
datatypes ×1
exists ×1
functions ×1
group-by ×1
identity ×1
join ×1
mysql ×1
performance ×1
permissions ×1
pivot ×1
query-store ×1
signature ×1
sql-standard ×1
sqlite ×1
trigger ×1