rspec/rules/S4054/tsql/rule.adoc
Fred Tingaud 51369b610e
Make sure that includes are always surrounded by empty lines (#2270)
When an include is not surrounded by empty lines, its content is inlined
on the same line as the adjacent content. That can lead to broken tags
and other display issues.
This PR fixes all such includes and introduces a validation step that
forbids introducing the same problem again.
2023-06-22 10:38:01 +02:00

68 lines
1.3 KiB
Plaintext

== Why is this an issue?
Using ``++TOP++`` in a ``++SELECT++`` without ordering the results from which the "top" results are chosen will return a seemingly random set of rows, and is surely a mistake.
The same random behavior also occurs when using ``++TOP++`` in a ``++DELETE++``, ``++INSERT++``, ``++UPDATE++`` and ``++MERGE++``.
=== Noncompliant code example
[source,sql]
----
SELECT TOP 10 -- Noncompliant selects 10 random rows
fname, lname, city
FROM people
WHERE city IS NOT NULL;
DELETE TOP (10) -- Noncompliant deletes 10 random rows
FROM PurchaseOrder
WHERE DueDate < '20020701';
----
=== Compliant solution
[source,sql]
----
SELECT TOP 10
fname, lname, city
FROM people
WHERE city IS NOT NULL
ORDER BY birthdate;
DELETE
FROM PurchaseOrder
WHERE OrderID IN (
SELECT TOP 10
OrderID
FROM PurchaseOrder
WHERE DueDate < '20020701'
ORDER BY DueDate ASC
);
----
ifdef::env-github,rspecator-view[]
'''
== Implementation Specification
(visible only on this page)
=== Message
Add an "ORDER BY" clause; without it, "TOP" will return rows selected at random.
=== Highlighting
``++TOP X++``
'''
== Comments And Links
(visible only on this page)
include::../comments-and-links.adoc[]
endif::env-github,rspecator-view[]