让我们检查这两个语句:
IF (CONDITION 1) OR (CONDITION 2)
...
IF (CONDITION 3) AND (CONDITION 4)
...
Run Code Online (Sandbox Code Playgroud)
如果CONDITION 1是TRUE,会CONDITION 2被检查吗?
如果CONDITION 3是FALSE,会CONDITION 4被检查吗?
条件如何WHERE:SQL Server 引擎是否优化WHERE子句中的所有条件?程序员是否应该以正确的顺序放置条件以确保 SQL Server 优化器以正确的方式解析它?
添加:
感谢 Jack 提供链接,来自 t-sql 代码的惊喜:
IF 1/0 = 1 OR 1 = 1
SELECT 'True' AS result
ELSE
SELECT 'False' AS result
IF 1/0 = 1 AND 1 = 0
SELECT 'True' …Run Code Online (Sandbox Code Playgroud) 在每个 SQL 语句之后使用 GO 语句的原因是什么?我知道 GO 表示批处理结束和/或允许声明的声誉,但是在每个声明之后使用它有什么好处。
我只是很好奇,因为很多 Microsoft 文档等都在每次声明后开始使用它,或者我才刚刚开始注意到。
还有什么被认为是最佳实践?
我们希望停用一个 SQL Server 实例,该实例上仍保留有几个数据库。
如何判断用户或 Web 应用程序是否仍在使用它们?
我找到了一个论坛帖子,里面有一个 T-SQL 查询,你可以运行它来检索上次查询日期。它似乎有效,但我想知道此信息是否足够有效以删除数据库。是吗?
如果您有其他方法也有帮助。
正如标题所暗示的,我需要一些帮助来获得 T-SQL 的运行总数。问题是我需要做的总和是计数的总和:
sum(count (distinct (customers)))
Run Code Online (Sandbox Code Playgroud)
假设我单独进行计数,结果将是:
Day | CountCustomers
----------------------
5/1 | 1
5/2 | 0
5/3 | 5
Run Code Online (Sandbox Code Playgroud)
我需要输出总和为:
Day | RunningTotalCustomers
----------------------
5/1 | 1
5/2 | 1
5/3 | 6
Run Code Online (Sandbox Code Playgroud)
在使用该coalesce方法之前,我已经完成了运行总计,但从未进行过计数。我现在不知道该怎么做。
我已经对OPTION (FAST XXX)查询提示在SELECT语句中的作用做了一些挖掘,但我仍然对此感到困惑。根据 MSDN:
指定为快速检索第一个 number_rows 优化查询。这是一个非负整数。返回第一个 number_rows 后,查询将继续执行并生成其完整结果集。
对我来说这没有多大意义,但基本上查询可以非常快地获得前 XXX 行,然后以正常速度获得其余行?
让我想到这一点的 Microsoft Dynamics 查询是:
select pjproj.project,pjproj.project_desc,pjproj.customer,pjproj.cpnyid
from pjproj WITH (NOLOCK)
where project like '%'
order by project OPTION(FAST 500)
Run Code Online (Sandbox Code Playgroud)
谁能准确解释这个查询提示在做什么以及它比不使用它的优势?
我想根据其 Unicode 代码点将 Unicode 字符串变量设置为特定字符。
我想使用 65535 以外的代码点,但 SQL Server 2008 R2 数据库的排序规则为SQL_Latin1_General_CP1_CI_AS.
根据Microsoft 的 NCHAR 文档,该NCHAR函数采用如下整数:
整数表达式
当数据库的排序规则不包含补充字符 (SC) 标志时,这是一个从 0 到 65535(0 到 0xFFFF)的正整数。如果指定了超出此范围的值,则返回 NULL。有关补充字符的更多信息,请参阅排序规则和 Unicode 支持。
当数据库的排序规则支持补充字符 (SC) 标志时,这是一个从 0 到 1114111(0 到 0x10FFFF)的正整数。如果指定了超出此范围的值,则返回 NULL。
所以这段代码:
SELECT NCHAR(128512);
Run Code Online (Sandbox Code Playgroud)
NULL在此数据库中返回。
我希望它返回与此相同的:
SELECT N'';
Run Code Online (Sandbox Code Playgroud)
如何在排序规则“不包含补充字符 (SC) 标志”的数据库中使用代码(不使用实际表情符号字符)将 Unicode 字符串变量(例如 nvarchar)设置为表情符号?
(最终我希望任何角色都能工作。我只是为了便于参考而选择了表情符号。)
(虽然服务器是SQL Server 2008 R2,但我也很好奇以后版本有什么解决方案。)
假设没有办法,我可以在另一个具有适当排序规则的数据库中引用内联用户定义函数吗?
如何找到具有“补充字符”标志的归类?
这在我们的服务器上不返回任何记录:
SELECT * FROM sys.fn_helpcollations()
WHERE name LIKE 'SQL%[_]SC';
Run Code Online (Sandbox Code Playgroud)
似乎引入了 SQL Server …
我正在尝试使以下 SQL 语句起作用,但出现语法错误:
SELECT A.*, COUNT(B.foo)
FROM TABLE1 A
LEFT JOIN TABLE2 B ON A.PKey = B.FKey
GROUP BY A.*
Run Code Online (Sandbox Code Playgroud)
这里,A 是一个有 40 列的宽表,如果可能,我想避免在 GROUP BY 子句中列出每个列名。我有很多这样的表,我必须在这些表上运行类似的查询,所以我必须编写一个存储过程。解决这个问题的最佳方法是什么?
我正在使用 MS SQL Server 2008。
看起来执行 T-SQL 的速度取决于与服务器的网络连接的延迟。我假设如果 SQL Server 没有什么可向客户端报告的,它只会执行直到完成,但测试显示了另一个故事。
create procedure UselessLoop
@I int
as
declare @D datetime = getdate()
while @I > 0 set @I -= 1
print datediff(millisecond, @D, getdate())
Run Code Online (Sandbox Code Playgroud)
exec UselessLoop 100000
Server Milliseconds
local 53
nearby 63
faraway 660
Run Code Online (Sandbox Code Playgroud)
exec UselessLoop 1000000
Server Milliseconds
local 546
nearby 640
faraway 6183
Run Code Online (Sandbox Code Playgroud)
使用 SSMS 对来自不同计算机的同一服务器执行测试。本地从服务器执行,附近在同一个本地网络上,远处是从 500 公里外的另一个办公室执行,通过 1 Gb 光纤连接。
显然,SQL Server 和客户端之间存在一些直接依赖于执行的语句数量的通信。
我使用 Wireshark 查看传输的内容,我不能说我理解那么多,但它是一个 tcp.stream,在 22740 个数据包中交换了总共 26 MB。
一个无用的函数呢?
create function dbo.UDFUselessLoop(@I int)
returns int
as
begin
declare …Run Code Online (Sandbox Code Playgroud) 我有一些自动生成的 T-SQL,这可能是有效的,但我不太明白。
ALTER TABLE [dbo].[MyTable]
WITH CHECK
CHECK CONSTRAINT [My_FORIEGN_KEY];
Run Code Online (Sandbox Code Playgroud)
我知道什么是外键约束,但什么是外键约束CHECK CHECK?
我正在努力实现以下目标:
California | Los Angeles, San Francisco, Sacramento
Florida | Jacksonville, Miami
Run Code Online (Sandbox Code Playgroud)
不幸的是,我得到了“,洛杉矶,旧金山,萨克拉门托,杰克逊维尔,迈阿密”
我可以使用 STUFF 函数实现我想要的结果,但想知道是否有使用 COALESCE 更简洁的方法?
STATE | CITY
California | San Francisco
California | Los Angeles
California | Sacramento
Florida | Miami
Florida | Jacksonville
DECLARE @col NVARCHAR(MAX);
SELECT @col= COALESCE(@col, '') + ',' + city
FROM tbl where city = 'California';
SELECT @col;
Run Code Online (Sandbox Code Playgroud)
谢谢
sql-server ×10
t-sql ×10
collation ×1
condition ×1
constraint ×1
encoding ×1
group-by ×1
hints ×1
optimization ×1
performance ×1
unicode ×1