Varje SQL-batch måste passa inom satsstorleksgränsen:65 536 * Nätverkspaketstorlek.
Utöver det är din fråga begränsad av körtidsförhållanden. Det kommer vanligtvis att ta slut för stackstorlek eftersom x IN (a,b,c) är ingenting annat än x=a ELLER x=b ELLER x=c vilket skapar ett uttrycksträd som liknar x=a OR (x=b OR (x) =c)), så det blir väldigt djupt med ett stort antal OR. SQL 7 skulle träffa en SO vid cirka 10 000 värden i IN, men nuförtiden är stackarna mycket djupare (på grund av x64), så det kan gå ganska djupt.
Uppdatera
Du har redan hittat Erlands artikel om att skicka listor/arrayer till SQL Server. Med SQL 2008 har du också tabellvärderade parametrar som låter dig skicka en hel DataTable som en enda tabelltypsparameter och ansluta till den.
XML och XPath är en annan gångbar lösning:
SELECT ...
FROM Table
JOIN (
SELECT x.value(N'.',N'uniqueidentifier') as guid
FROM @values.nodes(N'/guids/guid') t(x)) as guids
ON Table.guid = guids.guid;