Question: I have one master and one detail table as following

```
Master:-
   BatchID
   BatchStatus
Detail
   DetailID
   BatchID
   DetailRecordStatus (Possible values 1,2,3)

```

I am trying to write a single a query that can update the Batch Status in Master based on `detailRecordStatus` values equal to 2 or 3

Answer: 
This problem has irritated me as well. I have 5 dbs hooked onto my SQL Server instance, 3 of which are working fine, but 2 of which complains 

*The operating system returned error 21(The device is not ready.) to SQL Server during a read at offset 0x00000000204000 in file 'E:\xxxxxxxx.mdf'*

Here is my solution.

1. Turn on **Services.msc**, locate the service called **SQL Server (instance name)**, right click and **restart** it.
2. Go back to ssms, refresh your db, and things should work.

On a side note, I did try taking db offline/online method. It did not work in my case. Brute force restarting the sqlserver service worked nicely. this might be a problem for those whose stake of taking all dbs offline are too high. However, if you're just doing local development like me, then this solution should be fine.
I have come across the same problem many times and thought I should share my solution (notwithstanding the already provided answers):

So I have two SQL instances (SQL 2008 and SQL 2017). The error does Not manifest in my SQL08 Instance but on SQl17. This is caused by the "account Credentials" provided during Installation/setup of each SQL instance:

[![enter image description here](https://i.stack.imgur.com/ld3f7.jpg)](https://i.stack.imgur.com/ld3f7.jpg)

This can be seen under Windows Services. The SQL08 was set to use the "Local System Account" whilst the failing SQL17 was set to "NETWORK ACCOUNT" during setup.
So just change that and restart the SQL service here (or restart instance in SQL browser).

The second part to this problem is unique to SQL Server 2017 CTP 2.0 when using SQL Server Management Studio V17 in which case the SMO switched to using "*sys.dm\_os\_enumerate\_fixed\_drives*" instead of the old "*xp\_fixeddrives*" to get free space information of your local disk.
To workaround this, go to the DEVICE MANAGER and temporarily disable the cited drive (in my case was drive "G" which is just my DVD-ROM drive).