將 SELECT 結果直接指派給變數時,若查詢回傳多列,變數最終會保留最後一列的值,且不會報錯。
DECLARE @user NVARCHAR(20) = 'user1'
DECLARE @userweek INT
SELECT @userweek = [week] FROM base WHERE userid = @user
-- 假設只有一列符合
SELECT @userweek -- 正確回傳該列的 week 值
DECLARE @user NVARCHAR(20) = 'user1'
DECLARE @userweek INT
SELECT @userweek = [week] FROM base -- 無 WHERE 條件,回傳所有列
-- 假設 base 有 100 列
SELECT @userweek -- 回傳第 100 列的 week 值(最後一列)
@@ROWCOUNT 仍會正確回傳影響列數(如 100),但變數值不可預期TOP 1 或唯一鍵條件)SELECT ... INTO #temp、游標、或 STRING_AGG (SQL 2017+) 等集合操作EXEC('SELECT @var = col FROM tbl') 同樣受此規則限制