Useful MS SQL Queries

Find Tables by Column Name

How to search column names in all tables that have a string.

Solution by Vikrant in a Stack Overflow post here.

SELECT      c.name  AS 'ColumnName'
            ,t.name AS 'TableName'
FROM        sys.columns c
JOIN        sys.tables  t   ON c.object_id = t.object_id
WHERE       c.name LIKE '%Code%'
ORDER BY    TableName
            ,ColumnName;

Pagination

SELECT UserId,
      FirstName,
      LastName,
      BirthDate
  FROM [dbo].[Users]      
  ORDER BY [SortOrder] DESC
  OFFSET 5 * 7 ROWS
  FETCH NEXT 5 ROWS ONLY;

Finding Duplicate Records

SELECT 
    Username, 
    COUNT(Username)
FROM
    Users
GROUP BY Username
HAVING COUNT(Username) > 1;

Finding Average Age

SELECT AVG(DATEDIFF(m, BirthDate, GETDATE())/12) as Age
FROM Users
SELECT YEAR(DATEADD(DAY, AVG(DATEDIFF(DAY, '1900-01-01', BirthDate)), '1900-01-01')) as AverageAge 
FROM Users

Gets the average age by years old

SELECT AVG(DATEDIFF(m, BirthDate, GETDATE())/12) as Age
FROM Users

Ranking top 10’s by Month

SELECT rownum,
       MonthValue,
       Category,
       CategoryCount
	  ,RANK () OVER ( 
		PARTITION BY MonthValue
		ORDER BY CategoryCount DESC
	  ) count_rank 
  FROM SomeTopTenTable

Create new table with specific data/columns from another table

SELECT TOP(20) Id, Username, FirstName, LastName, Gender 
INTO users 
FROM RandomUsers 

Get a count with Group By, between two dates.


DECLARE @EventId INT = 1;

select m.EventId, m.Name, count(u.ChosenContestantId) as Votes
from Contestants m 
left join VotingTbl u on m.EventId = u.EventId
where u.ChosenContestantId = m.Id
and m.EventId = @EventId                                    
and u.DateRecorded between CONVERT(DATETIME, '2020-01-01') and CONVERT(DATETIME,'2020-01-31')
group by m.EventId, m.Name, u.ChosenContestantId 
order by count(u.ChosenContestantId) desc
                                    

List all the columns of a table

List all columns by table
select schema_name(tab.schema_id) as schema_name,
    tab.name as table_name, 
    col.column_id,
    col.name as column_name, 
    t.name as data_type,    
    col.max_length,
    col.precision
from sys.tables as tab
    inner join sys.columns as col
        on tab.object_id = col.object_id
    left join sys.types as t
    on col.user_type_id = t.user_type_id
order by schema_name,
    table_name, 
    column_id;

Search Functions/Stored Procedures

SELECT ROUTINE_NAME, ROUTINE_DEFINITION
FROM INFORMATION_SCHEMA.ROUTINES 
WHERE upper(ROUTINE_DEFINITION) LIKE '%SICK%' 
AND ROUTINE_TYPE='PROCEDURE'
ORDER BY ROUTINE_NAME

Get Performance Statistics

Get performance statistics with statistics io. This can help determine what kind of index should be applied to a certain table.

set statistics io on

Example


set statistics io on
SELECT UserId, FirstName, LastName, Title
FROM Users
WHERE UserId = 212

Then click on the Messages Tab in SSMS

How to Declare a Variable

DECLARE @searchStr AS VARCHAR(100)  = '%thomas%';

SELECT ID, FirstName, LastName, Title, Email, Description, Col1, Col2
FROM Users
WHERE FirstName like @searchStr
OR LastName like @searchStr
OR Title like @searchStr
OR Email like @searchStr
OR Description like @searchStr 
OR Col1 like @searchStr
OR Col2 like @searchStr;

Search All Stored Procedures – Text Search

How to search for text in all stored procedures in a single database.

SELECT OBJECT_NAME(object_id), * FROM sys.sql_modules WHERE definition LIKE '%YOUR_SEARCH_STRING%'