I've implemented a simple mechanism to put data into the database. It
just creates entities and stores them to the database. This avoids
maintaining of sql scripts. In tests, we have mostly individual data
and store only what we need.
If you really want to run them in a sql server, I would run them in
different catalog (or "schema" or "database" or however it is called
next time). For that reason, you can implement a connection pool,
where every test gets another database when requesting a connection,
and after you run out of catalogs you let it wait using a lock
statement until another test releases one.
Isolation is important in tests. If they fail because of some
interaction coincidence, you've probably found an issue, but you can't
do anything because you can't reproduce it. Limit testing strictly to
things that are reproducible else it will drive you crazy.