小编GWR*_*GWR的帖子

高效插入带有聚集索引的表

我有一个 SQL 语句,该语句将行插入到表中,并且在 TRACKING_NUMBER 列上具有聚集索引。

例如:

INSERT INTO TABL_NAME (TRACKING_NUMBER, COLB, COLC) 
SELECT TRACKING_NUMBER, COL_B, COL_C 
FROM STAGING_TABLE
Run Code Online (Sandbox Code Playgroud)

我的问题是 - 在聚集索引列的 SELECT 语句中使用 ORDER BY 子句是否有帮助,或者是否会因 ORDER BY 子句所需的额外排序而否定任何获得的收益?

performance sql-server clustered-index insert

31
推荐指数
3
解决办法
7万
查看次数

比较可以包含 NULLS 的列 - 有没有更优雅的方法?

我知道您无法将值与 NULL 进行比较并期望结果而不添加类似以下代码的内容...

SELECT
    *
FROM 
    A INNER JOIN 
    B ON A.ID = B.ID
WHERE
    A.STRING <> B.STRING OR (A.STRING IS NULL AND B.STRING IS NOT NULL) OR (A.STRING IS NOT NULL AND B.STRING IS NULL) OR 
    A.DT <> B.DT OR (A.DT IS NULL AND B.DT IS NOT NULL) OR (A.DT IS NOT NULL AND B.DT IS NULL) OR 
    A.B <> B.B OR (A.B IS NULL AND B.B IS NOT NULL) OR (A.B IS NOT NULL AND B.B IS NULL) …
Run Code Online (Sandbox Code Playgroud)

null sql-server

20
推荐指数
1
解决办法
1万
查看次数

SQL Server 从备份还原单个表

在 SQL Server 2005 上,我们每周进行一次完整备份,每晚进行一次增量备份。

我想知道是否可以从备份中恢复单个表,无论是源数据库还是不同的数据库。

我在网上找不到任何明确的答案。

提前致谢。

sql-server-2005 sql-server

20
推荐指数
2
解决办法
14万
查看次数

在 SQL Server 中本地解码 Base64 字符串

varchar在 SQL Server 的表中有一个列,其中包含一个 base64 编码的文本字符串,我想将其解码为纯文本等效项

SQL Server 是否具有处理此类事情的任何本机功能?

一个示例 base64 字符串:

cm9sZToxIHByb2R1Y2VyOjEyIHRpbWVzdGFtcDoxNDY4NjQwMjIyNTcxMDAwIGxhdGxuZ3tsYXRpdHVkZV9lNzo0MTY5ODkzOTQgbG9uZ2l0dWRlX2U3Oi03Mzg5NjYyMTB9IHJhZGl1czoxOTc2NA==
Run Code Online (Sandbox Code Playgroud)

解码为:

role:1 producer:12 timestamp:1468640222571000 latlng{latitude_e7:416989394 longitude_e7:-738966210} radius:19764
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql sql-server-2008-r2 cast string-manipulation

19
推荐指数
1
解决办法
6万
查看次数

存储 HASHBYTES('MD5', ...) 结果的最佳数据类型

存储结果的最佳数据类型是HASHBYTES('MD5', ...)什么?

它输出 16 字节的二进制如下:例如

0x5CFCD77F9FF836189D2F647EBCEA183E
Run Code Online (Sandbox Code Playgroud)

我可以将它存储在以下数据类型中:

  • char(34)
  • binary(16)(我认为 - 我在这里读到(/sf/ask/1030561381/#16680423)使用相同的算法应该返回无论输入字符串如何,每次都具有相同数量的字节)
  • 其他?

每行都有一个值(没有空值),并且该列将用于与另一个表中的类似列进行比较。

哪种数据类型用于存储HASHBYTES上述使用的输出的最佳数据类型?

我在想,因为固定长度的数据类型有时在连接等方面可能更有效。binary(16)vs varbinary(8000)(的默认输出HASHBYTES)似乎最好,而binary(16)vs avarchar(34)更好,因为它会使用更少的存储空间。

sql-server datatypes sql-server-2014 hashing

8
推荐指数
1
解决办法
1万
查看次数

对用于 BitWise 查询的 INT 列进行索引的最佳方法

基于 WHERE 子句中的按位比较对列进行索引以进行有效查找的最佳方法是什么,例如

SELECT ID, FLAGS, NAME FROM TABLE WHERE FLAGS & 4 = 4
Run Code Online (Sandbox Code Playgroud)

我的环境是SQL Server 2012。

据我了解,此类查询中不会使用 FLAGS 列上的索引。

我知道另一个选择是将 FLAGS 列分解为单独的列,但我想避免这种情况,因为在某些情况下,这意味着 25 个以上的新列,每个列都需要索引组合来支持常见查询。

有没有什么方法可以对单列建立索引以使按位查询更有效?

我尝试按照下面 dudu 的建议使用带有索引的计算列,但是当我在具有聚集索引的表上使用并开始选择列(而不是仅仅选择 count(*) 时,它不再使用该索引新的计算列。

SELECT 
* 
INTO 
    MYTABLE
FROM 
(
    SELECT 'A' COL_A, 'A' COL_B, CAST(129 AS INT) FLAGS UNION
    SELECT 'B' COL_A, 'D' COL_B, CAST(129 AS INT) FLAGS UNION
    SELECT 'C' COL_A, 'S' COL_B, CAST(129 AS INT) FLAGS UNION
    SELECT 'D' COL_A, 'F' COL_B, CAST(129 AS INT) FLAGS UNION
    SELECT 'E' …
Run Code Online (Sandbox Code Playgroud)

index sql-server sql-server-2012 bitwise-comparison

6
推荐指数
1
解决办法
2248
查看次数

将 3000 万行导出为 CSV

我有一个查询在 Oracle 数据库 (11g) 中命中多个表。我无权访问服务器本身。我使用 SQL Developer 或 SQL*Plus 进行连接。

大约有 3100 万行和 7 列,我想将其转储到 CSV 文件中。

我怎样才能做到这一点?

oracle oracle-sql-developer

5
推荐指数
1
解决办法
7万
查看次数

连接,带分隔符,其中任何输入字段组合都可能为空

我有三列,CITY, STATE, COUNTRY。一列、两列或所有列可能为 NULL。

通过以下逻辑,使用下面的 SQL 生成单个字符串。很乱,想知道有没有更简单的方法来实现输出?我考虑过 CONCAT() 但我不认为我可以使用它并且仍然在那里获得分隔符。

  • 如果 CITY 和 STATE 都有值,请使用该值,以', '.分隔。排除国家。
  • 如果仅存在 CITY 或 STATE 之一,且存在 AND Country,则使用存在的 CITY/STATE 之一,加上分隔符和 COUNTRY。
  • 如果 CITY 或 STATE 都不存在,则仅使用不带分隔符的国家/地区
  • 如果仅存在三个中的一个,则按原样使用它,不带分隔符
  • 如果不存在,则输出应为 NULL (not '')

我要补充一点,如果 CITY 和/或 STATE 值存在,那么 COUNTRY 永远不会为 NULL。

这是到目前为止的代码。它很乱,但我相信它满足上面列出的输出要求。

我正在使用 SQL Server 2008。

CASE WHEN 
    CASE WHEN ISNULL(M.CITY, '') = '' THEN  '' ELSE ISNULL(M.CITY, '') + ', ' END + CASE WHEN ISNULL(M.PROVINCE, '') = '' THEN …
Run Code Online (Sandbox Code Playgroud)

sql-server

5
推荐指数
1
解决办法
825
查看次数

奇怪的 WHERE 子句行为。为什么这会返回一行?

在 SQL Server 2008 中,为什么这会返回行,即使我在 where 子句末尾添加一个或两个或更多空格?在下面的例子中不应该找到零记录吗?

WITH SRC AS (SELECT cast('12345' as varchar) DEMO)
SELECT * FROM SRC WHERE DEMO='12345  '
Run Code Online (Sandbox Code Playgroud)

如果需要查询来查找'1234 '但不需要查询怎么办'1234'

sql-server

5
推荐指数
3
解决办法
303
查看次数

无需向开发人员授予系统管理员的 SQL Server 调试器权限

BOL 文档说运行调试器需要 sysadmin 权限。

我 90% 肯定没有解决此要求的方法,但我想我会问以防万一有人找到了一种方法来授予调试器权限而不授予系统管理员权限。

当您有一个开发团队需要逐步执行带有变量等的复杂游标循环以调试某些方面时,人们会怎么做?

大多数商店甚至不允许开发人员在开发服务器上拥有系统管理员权限,并且许多商店不允许开发人员使用他们自己的开发人员 sql server 版本在他们的本地机器上保留企业数据的副本,例如由于 PII 和数据安全原因。

不知道为什么调试器会这样设置。

所以,我很好奇其他人如何处理类似场景中的 Debugger 权限请求。

你在你的环境中做什么?

sql-server permissions debugging sql-server-2014

5
推荐指数
1
解决办法
8579
查看次数