How about:
dxsd.ddsCaps.dwCaps = DDSCAPS_TEXTURE | DDSCAPS_VIDEOMEMORY | DDSCAPS_SYSTEMMEMORY;
Will try to use video memory first, and if that fails then it will use system memory.
If the call is done ONLY with DDSCAPS_VIDEOMEMORY and that fails then it should return with an error and leave it to the programmer to do what he wants (possibly use the code that you showed).