Do table locks get released after a query finishes when WAITFOR is used after that query within the same batch and transaction? If I have a query that reads from a table, if that query is proceeded with the WAITFOR keyword (within the same batch and transaction) will the table lock of the preceding query be held until the WAITFOR completes and the transaction finishes? (I mean in the context of a Read Committed isolation level server.)

Example query:

BEGIN TRANSACTION

SELECT *
FROM ReallyLargeTable

WAITFOR DELAY '00:30';

COMMIT TRANSACTION


Does the WAITFOR DELAY cause the preceding query to hold its table lock against ReallyLargeTable for an additional 30 seconds until the delay is over and the transaction is committed?
It depends on the transaction isolation level.

In read committed it will release locks.
In "Repeatable read" and "Serializable" it will hold locks.

You can find more info in the following article: SET TRANSACTION ISOLATION LEVEL