Das Problem ist, dass `\caption` die erste Anweisung in der Tabellenzeile sein muss. Die erste Anweisung ist bei Dir aber `\small`. Damit hat die erste Zelle der Tabellenzeile bereits begonnen und das von `\caption` verwendete `\noalign` schlägt fehl.
Ich gehe davon aus, dass Du möchtest, dass die Tabelle insgesamt in `\small` gesetzt werden soll. Das erreichst Du korrekt mit:
\documentclass [12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{longtable}
\begin{document}
{\small
\begin{longtable}{l r r}
\caption{Tabellenüberschrift}\label{Tab. 2}\\ \hline
& Bezeichnung der Spalte & Bezeichnung der anderen Spalte \\
& Inhalt & Inhalt \\ \hline
Inhalt & Daten & Daten \\
Inhalt & & \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
Inhalt II & & Daten\\
Inhalt III & & Daten\\
Inhalt IV & & Daten \\
Inhalt V) & & Daten \\
\textit{N}& Zahl & Zahl\\
\hline
\end{longtable}}
\end{document}
Das Schließen der vor `\small` mit `{` begonnenen Gruppe unmittelbar nach `\end{longtable}`, also ohne ein abschließendes Absatzende (beispielsweise mit `\par`) ist in diesem Sonderfall korrekt, weil der Absatz bereits durch `\end{longtable}` beendet wird. Wir befinde uns also beim Schließen der Gruppe mit `}` bereits im vertikalen Modus.
Alternativ zur Verwendung einer Gruppe kann man auch die Schriftgröße hin und her umschalten, wenn man die Schriftgröße vor der Tabelle kennt:
\documentclass [12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{longtable}
\begin{document}
\small
\begin{longtable}{l r r}
\caption{Tabellenüberschrift}\label{Tab. 2}\\ \hline
& Bezeichnung der Spalte & Bezeichnung der anderen Spalte \\
& Inhalt & Inhalt \\ \hline
Inhalt & Daten & Daten \\
Inhalt & & \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
Inhalt II & & Daten\\
Inhalt III & & Daten\\
Inhalt IV & & Daten \\
Inhalt V) & & Daten \\
\textit{N}& Zahl & Zahl\\
\hline
\end{longtable}
\normalsize
\end{document}
Man kann trefflich darüber streiten, welche Lösung besser ist. Mir persönlich gefällt die erste besser.
Sollen *alle* Tabellen mit `longtable` in `\small` gesetzt werden, wäre es sinnvoll, diese Schriftgrößenänderung direkt in die Definition von `\longtable` hinein zu patchen:
\documentclass [12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{longtable}
\usepackage{xpatch}
\xpatchcmd{\longtable}{\par}{\par\small}{}{}
\begin{document}
Vergleichstext in \verb|\normalsize|.
\begin{longtable}{l r r}
\caption{Tabellenüberschrift}\label{Tab. 2}\\ \hline
& Bezeichnung der Spalte & Bezeichnung der anderen Spalte \\
& Inhalt & Inhalt \\ \hline
Inhalt & Daten & Daten \\
Inhalt & & \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
Inhalt II & & Daten\\
Inhalt III & & Daten\\
Inhalt IV & & Daten \\
Inhalt V) & & Daten \\
\textit{N}& Zahl & Zahl\\
\hline
\end{longtable}
Vergleichstext in \verb|\normalsize|.
\end{document}
Natürlich könnte man das Verfahren auch nützen, um nur die jeweils nächste Tabelle in einer anderen Schriftgröße zu setzen:
\documentclass [12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{longtable}
\usepackage{xpatch}
\makeatletter
\xpatchcmd{\longtable}{\par}{\par\LT@font\global\let\LT@font\relax}{}{}
\newcommand*{\LT@font}{}
\newcommand*{\nextlongtablefont}[1]{\def\LT@font{#1}}
\makeatother
\begin{document}
Vergleichstext in \verb|\normalsize|.
\nextlongtablefont{\small}
\begin{longtable}{l r r}
\caption{Tabellenüberschrift}\label{Tab. 2}\\ \hline
& Bezeichnung der Spalte & Bezeichnung der anderen Spalte \\
& Inhalt & Inhalt \\ \hline
Inhalt & Daten & Daten \\
Inhalt & & \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
\ \ Daten & & Daten \\
Inhalt II & & Daten\\
Inhalt III & & Daten\\
Inhalt IV & & Daten \\
Inhalt V) & & Daten \\
\textit{N}& Zahl & Zahl\\
\hline
\end{longtable}
Vergleichstext in \verb|\normalsize|.
\end{document}
Nebenbei bemerkt solltest Du eventuell auch die `\ \ ` zum Einfügen von horizontalem Abstand überdenken. Horizontalen Abstand fügt man besser mit `\hspace` bzw. `\hspace*` oder `\quad` oder `\qquad` oder ähnlichen Befehlen und noch besser mit semantischem Markup ein. Innerhalb einer Tabelle gibt es ggf. auch noch bessere Möglichkeiten, für die jedoch der konkrete Aufbau und Inhalt der Tabelle bekannt sein müsste.müsste.