Twój przykładowy plik xml nie zawiera Pages węzeł. Oznacza to, że gdy FROM obliczana jest klauzula, tworzone jest sprzężenie krzyżowe między listą zerową a listą z jednym wierszem. Wynikowy produkt nie ma wierszy, więc nie ma nic SELECT ed, więc nic nie jest INSERT wyd.
Jeśli rzeczywiście chcesz wstawić jeden wiersz do BookDetails dla każdego booksdetail w przychodzącym pliku xml, powinieneś zrobić coś takiego
SELECT
ParamValues.PL.value('Pages[1]','int'),
CAST(ParamValues.PLr.value('Description[1]','varchar(max)') AS text)
FROM
@xml.nodes('/booksdetail') as ParamValues(PL)
To znaczy, zniszcz przychodzący plik xml do booksdetail węzłów i wyciągnij każdy z .value jakie chcesz z tych wierszy.