rspec/rules/S4103/tsql/rule.adoc
Fred Tingaud 16f6c0aecf
Inline adoc when include has no additional value (#1940)
Inline adoc files when they are included exactly once.

Also fix language tags because this inlining gives us better information
on what language the code is written in.
2023-05-25 14:18:12 +02:00

70 lines
1.6 KiB
Plaintext

== Why is this an issue?
A ``++FETCH++`` statement fails when the number of variables does not match the number of columns selected in the CURSOR definition.
=== Noncompliant code example
[source,sql]
----
DECLARE c1 cursor FOR SELECT FirstName, LastName FROM customer;
OPEN c1;
FETCH NEXT FROM c1 INTO @Name; -- Noncompliant
----
=== Compliant solution
[source,sql]
----
DECLARE c1 cursor FOR SELECT FirstName, LastName FROM customer;
OPEN c1;
FETCH NEXT FROM c1 INTO @FirstName, @LastName;
----
ifdef::env-github,rspecator-view[]
'''
== Implementation Specification
(visible only on this page)
=== Message
Refactor this ``++FETCH++`` to select the same number of columns selected in "xxx".
=== Highlighting
* primary: ``++INTO++`` + column list in ``++FETCH++`` statement
* secondary: ``++SELECT++`` + column list in cursor
'''
== Comments And Links
(visible only on this page)
=== is related to: S3613
=== is related to: S3614
=== on 20 Jul 2017, 15:26:19 Pierre-Yves Nicolas wrote:
According to the Microsoft https://docs.microsoft.com/en-us/sql/t-sql/language-elements/fetch-transact-sql[reference for FETCH]:
____
The number of variables must match the number of columns in the cursor select list.
____
The code can be compiled with no issue, for example in a stored procedure. The following error is raised at runtime:
----
Msg 16924, Level 16, State 1, Line 61
Cursorfetch: The number of variables declared in the INTO list must match that of selected columns.
----
=== on 7 Aug 2017, 15:03:24 Pierre-Yves Nicolas wrote:
\[~massimo.paladin] Why minor? Such code triggers a failure at execution time.
endif::env-github,rspecator-view[]