30.06.2013 Views

SQL Server Team-based Development - Red Gate Software

SQL Server Team-based Development - Red Gate Software

SQL Server Team-based Development - Red Gate Software

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Chapter 11: <strong>SQL</strong> Refactoring<br />

)<br />

SELECT name ,<br />

object_id ,<br />

object_text ,<br />

LEN(object_text) AS ObjectTextLength ,<br />

SIGN(CHARINDEX('CURSOR', object_text, 1))<br />

AS HasCursor ,<br />

SIGN(CHARINDEX('*', object_text, 1)<br />

) AS HasSelectAll ,<br />

CASE WHEN RightParen IS NULL THEN 0<br />

ELSE 1<br />

END AS HasFunctionsOnColumn<br />

FROM cteObjectText OT<br />

OUTER APPLY<br />

( SELECT *<br />

FROM cteColumnNames<br />

WHERE – – possible use of functions on<br />

– – column in a where clause<br />

– – it can give false positives but<br />

– – it's good enough<br />

PATINDEX('%' + RightParen + '%',<br />

object_text) > 1<br />

OR PATINDEX('%' + LeftParen +<br />

'%', object_text) > 1<br />

) CN<br />

WHERE object_text IS NOT NULL<br />

AND (<br />

– – 5000 chars is approximately 100 lines<br />

– – in SSMS with some formatting<br />

LEN(object_text) > 5000<br />

OR<br />

– – find all object that contain cursors<br />

CHARINDEX('CURSOR', object_text, 1) > 1<br />

OR<br />

– – find possible use of SELECT *<br />

CHARINDEX('*', object_text, 1) > 1<br />

)<br />

ORDER BY Name<br />

Listing 11-2: Finding objects to refactor.<br />

320

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!