TOP に変数を使用することができますが、カッコで括らないとエラーになります。
TOP で変数を使用する方法
SELECT TOP (@変数名) * FROM テーブル名;
注意 変数を使用する場合、カッコ() を忘れるとエラーになります。
-- エラー '@変数名' 付近に不適切な構文があります。
SELECT TOP @変数名 * FROM テーブル名;

サンプルコード
--レコード件数を確認
SELECT COUNT(*) FROM sys.objects;
--変数宣言
DECLARE @count INTEGER;
--変数に数値を代入
SET @count = 3
--SELECT
SELECT TOP (@count)
* FROM sys.objects;
- 2行目: SELECT COUNT(*) でレコードが 112件 あることを確認しています。
- 8行目: 変数に 3 を代入しています。
- 11行目: TOP に変数を指定し、3件 取得しています。

サンプルコードのダウンロード
サンプルコードの実行には SQL Server Express または SQL Server の環境が必要です。類似記事
検証環境
- Microsoft SQL Server 2019 (RTM-CU8) (KB4577194) - 15.0.4073.23 (X64) Sep 23 2020 16:03:08 Copyright (C) 2019 Microsoft Corporation Express Edition (64-bit) on Linux (Ubuntu 16.04.7 LTS) <X64>
- Docker image: mcr.microsoft.com/mssql/server:2019-CU8-ubuntu-16.04
- Docker Desktop 3.1.0(51484)
- Docker Engine 20.10.2
- Microsoft SQL Server Management Studio v17.7(14.0.17254.0)
- Microsoft Windows 10 Pro Version 20H2 OS Build 19042.789 Experience: Windows Feature Experience Pack 120.2212.551.0