If you are updating a table using a generic update (e.g. generated by codesmith) and you are passing in all the column values for a selected row, if there are foreign keys or indexes on the table and these have not changed i.e. the values passed in are the same as the values present does sql try to update them or is it clever enough to know that they haven't changed and only updated the values that have ? The reason for the question is one of performance. Of course I am sure a bespoke update to only affect the columns that have changed would be ideal but I am keen to understand the effect of a generic update where foreign keys exist.