SQL Standard Commands

SELECT
t.NAME AS TableName, s.Name AS SchemaName,
p.rows AS RowCounts, SUM(a.total_pages) * 8 AS TotalSpaceKB,
SUM(a.used_pages) * 8 AS UsedSpaceKB,
(SUM(a.total_pages) – SUM(a.used_pages)) * 8 AS UnusedSpaceKB
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN
sys.allocation_units a ON p.partition_id = a.container_id
LEFT OUTER JOIN
sys.schemas s ON t.schema_id = s.schema_id
WHERE
t.NAME NOT LIKE ‘dt%’
AND t.is_ms_shipped = 0
AND i.OBJECT_ID > 255
GROUP BY t.Name, s.Name, p.Rows
ORDER BY UsedSpaceKB desc

EXEC sp_spaceused;

SELECT
d.name AS ‘Database’,
m.name AS ‘File’,
m.size,
m.size * 8/1024 ‘Size (MB)’,
SUM(m.size * 8/1024) OVER (PARTITION BY d.name) AS ‘Database Total’
–,m.max_size
FROM sys.master_files m
INNER JOIN sys.databases d ON
d.database_id = m.database_id;

SELECT db.name DBName, tl.request_session_id, wt.blocking_session_id, OBJECT_NAME(p.OBJECT_ID) BlockedObjectName ,
tl.resource_type, h1.TEXT AS RequestingText, h2.TEXT AS BlockingTest, tl.request_mode
FROM sys.dm_tran_locks AS tl INNER JOIN sys.databases db ON db.database_id = tl.resource_database_id INNER JOIN sys.dm_os_waiting_tasks AS wt
ON tl.lock_owner_address = wt.resource_address INNER JOIN sys.partitions AS p
ON p.hobt_id = tl.resource_associated_entity_id INNER JOIN sys.dm_exec_connections ec1
ON ec1.session_id = tl.request_session_id INNER JOIN sys.dm_exec_connections ec2
ON ec2.session_id = wt.blocking_session_id CROSS APPLY sys.dm_exec_sql_text(ec1.most_recent_sql_handle)
AS h1 CROSS APPLY sys.dm_exec_sql_text(ec2.most_recent_sql_handle) AS h2

SELECT MID.statement AS [Database.Schema.Table],
MIC.column_id AS ColumnId,MIC.column_name AS ColumnName,
MIC.column_usage AS ColumnUsage,MIGS.user_seeks AS UserSeeks,
MIGS.user_scans AS UserScans,MIGS.last_user_seek AS LastUserSeek,
MIGS.avg_total_user_cost AS AvgQueryCostReduction,
MIGS.avg_user_impact AS AvgPctBenefit
FROM sys.dm_db_missing_index_details AS MID
CROSS APPLY sys.dm_db_missing_index_columns (MID.index_handle) AS MIC
INNER JOIN sys.dm_db_missing_index_groups AS MIG
ON MIG.index_handle = MID.index_handle INNER JOIN sys.dm_db_missing_index_group_stats AS MIGS
ON MIG.index_group_handle=MIGS.group_handle
ORDER BY MIGS.avg_user_impact DESC;

DECLARE @svrName VARCHAR(255)
DECLARE @sql VARCHAR(400)
DECLARE @output TABLE (line VARCHAR(255))

–by default it will take the current server name, we can the SET the server name as well

SET @svrName = @@SERVERNAME
IF CHARINDEX (”, @svrName) > 0
SET @svrName = SUBSTRING(@svrName, 1, CHARINDEX(”,@svrName)-1)

SET @sql = ‘powershell.exe -c “Get-WmiObject -ComputerName ‘ + QUOTENAME(@svrName,””) + ‘ -Class Win32_Volume -Filter ”DriveType = 3” | SELECT name,capacity,freespace | foreach{$.name+”|”+$.capacity/1048576/1024+”%”+$_.freespace/1048576/1024+”*”}”‘

–INSERTing disk name, total space and free space value in to temporary table

INSERT @output
EXEC xp_cmdshell @sql

–script to retrieve the values in MB FROM PS Script output

SELECT RTRIM(LTRIM(SUBSTRING(line,1,CHARINDEX(‘|’,line) -1))) AS drivename
,ROUND(CAST(RTRIM(LTRIM(SUBSTRING(line,CHARINDEX(‘|’,line)+1,
(CHARINDEX(‘%’,line) -1)-CHARINDEX(‘|’,line)) )) AS FLOAT),0) AS ‘capacity(GB)’
,ROUND(CAST(RTRIM(LTRIM(SUBSTRING(line,CHARINDEX(‘%’,line)+1,
(CHARINDEX(‘‘,line) -1)-CHARINDEX(‘%’,line)) )) AS FLOAT),0) AS ‘freespace(GB)’
,CAST (((ROUND(CAST(RTRIM(LTRIM(SUBSTRING(line,CHARINDEX(‘%’,line)+1,
(CHARINDEX(‘
‘,line) -1)-CHARINDEX(‘%’,line)) )) AS FLOAT),0)))*100/
(ROUND(CAST(RTRIM(LTRIM(SUBSTRING(line,CHARINDEX(‘|’,line)+1,
(CHARINDEX(‘%’,line) -1)-CHARINDEX(‘|’,line)) )) AS FLOAT),0)) AS INT) AS ‘freespace %’

FROM @output
WHERE line LIKE ‘[A-Z][:]%’
ORDER BY drivename

SELECT [server memory] = physical_memory_kb/1024.00/1024.00 FROM sys.dm_os_sys_info;

SELECT object_name, cntr_value/1024/1024 sql_mem_gb FROM sys.dm_os_performance_counters WHERE counter_name = ‘Total Server Memory (KB)’;

SELECT ServerName=@@servername, dbname=db_name(db_id()),p.name as UserName, p.type_desc as TypeOfLogin,
‘sysadmin’ as PermissionLevel,
[is_disabled]= CASE p.is_disabled
WHEN 1 THEN ‘Yes’
WHEN 0 THEN ‘No’
END,
‘WINDOWS_LOGIN’ as [policy_checked],
‘Windows AD Policy’ as [expiration_checked]
FROM sys.server_principals p
where IS_SRVROLEMEMBER (‘sysadmin’,p.name) = 1 and p.type_desc=’WINDOWS_LOGIN’
union
SELECT ServerName=@@servername, dbname=db_name(db_id()),p.name as UserName, p.type_desc as TypeOfLogin,
‘sysadmin’ as PermissionLevel,
[is_disabled]= CASE log.is_disabled
WHEN 1 THEN ‘Yes’
WHEN 0 THEN ‘No’
END,
[policy_checked]= CASE log.is_policy_checked
WHEN 1 THEN ‘Enabled’
WHEN 0 THEN ‘Disabled’
END,
[expiration_checked] = CASE log.is_expiration_checked
WHEN 1 THEN ‘Enabled’
WHEN 0 THEN ‘Disabled’
END
FROM sys.server_principals p JOIN sys.sql_logins log
ON p.name=log.name where IS_SRVROLEMEMBER (‘sysadmin’,p.name) = 1 order by 1,2,3

EXEC sp_configure ‘show advanced options’, 1;
GO
RECONFIGURE;
GO

SELECT * FROM sys.configurations where name like ‘%Agent%’

EXEC SP_CONFIGURE ‘Agent XPs’;

EXEC SP_CONFIGURE ‘Agent XPs’, 1;
GO
RECONFIGURE;
GO

EXEC sp_configure ‘show advanced options’, 0;
GO
RECONFIGURE;
GO

BACKUP DATABASE databasename TO DISK = ‘filepath’;

BACKUP DATABASE [YourDatabaseName]
TO DISK = ‘C:\Backups\YourDatabaseName.bak’
WITH FORMAT, INIT, COMPRESSION, STATS = 10;

RESTORE VERIFYONLY FROM DISK = ‘\\svr-dev\Backups\Mybd.bak’

USE [master]
ALTER DATABASE [mydb]
SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO

USE [master]
RESTORE DATABASE [mydb] FROM DISK = N’E:\MSSQL\Bakups\mydb_Full_.bak’ WITH FILE = 1, MOVE N’mydb_Data’ TO N’F:\MSSQL\Data\mydb.mdf’, MOVE N’mydb_Log’ TO N’E:\MSSQL\Logs\mydb_log.ldf’, NOUNLOAD, REPLACE, STATS = 5

GO

USE master;
GO

ALTER DATABASE [mydb]
SET MULTI_USER;
GO

SELECT * FROM [db_name].sys.synonyms order by name;

select db_name(database_id), encryption_state
from sys.dm_database_encryption_keys;

SELECT
db.name,
db.is_encrypted,
dm.encryption_state,
dm.percent_complete,
dm.key_algorithm,
dm.key_length
FROM
sys.databases db
LEFT OUTER JOIN sys.dm_database_encryption_keys dm
ON db.database_id = dm.database_id;

—-Select
SELECT * FROM sys.Servers a
LEFT OUTER JOIN sys.linked_logins b ON b.server_id = a.server_id
LEFT OUTER JOIN sys.server_principals c ON c.principal_id = b.local_principal_id

SELECT name, data_source FROM sys.servers WHERE is_linked = 1; — linked servers effectifs


—- Drop
EXEC master.dbo.sp_dropserver
@server=N’MYDBLK_REG’
, @droplogins=’droplogins’
GO

—–Add
EXEC master.dbo.sp_addlinkedserver
@server = N’SVR_LKNAME’,
@srvproduct=N’svr-dev\prod’,
@provider=N’SQLNCLI11′,
@datasrc=N’svr-dev\Prod’

SELECT * FROM OPENQUERY(MYDBLINK, ‘SELECT * FROM db_name.dbo.table_name’

Declare @Command varchar(1000)
set @command = ‘dir /o /b “\\bkpfolder\*.*”‘

print ‘Command for dir : ‘+@Command
exec master..xp_cmdshell @Command

— Grant access
GRANT exec ON xp_cmdshell TO “domain\testuser”;

— In a table
ALTER INDEX ALL ON dbo.tablename REBUILD

— — Example 1 — — —
BEGIN TRANSACTION [Tran1]
INSERT INTO [dbo].UserTestTable
     VALUES(‘Jean’, ‘Marc’)

Select * from [dbo].[UserTestTable]

COMMIT TRANSACTION [Tran1]
ROLLBACK TRANSACTION [Tran1]

— — — Example 2 — — —
BEGIN TRANSACTION [Tran1]
  BEGIN TRY

    INSERT INTO [dbo].UserTestTable
     VALUES(‘Jean’, ‘Marc’)    

    COMMIT TRANSACTION [Tran1]
  END TRY
  BEGIN CATCH

    PRINT ERROR_MESSAGE()    
    PRINT ‘Rolling back’      
    ROLLBACK TRANSACTION [Tran1]

  END CATCH

Note: In the “Command line” tab, it may be necessary to add /X86 to avoid compatibility issues.

Ex: /DTS “”\MSDB<Folder to SSIS>”” /SERVER “”SVR-DEV”” /X86 /CHECKPOINTING OFF /REPORTING E

Grant access to SQL Profiler

USE Master;
GO
GRANT ALTER TRACE TO [domain\toto.titi]
GO

GRANT ACCESS TO CREATE AND MANAGE JOBS

To force a password length for SQL Logins accounts, you need to modify the value of the local parameter Minimum password length in :

Start >> All Programs >> Administrative Tools >> Local Security Policy >> Security Settings >> Account Policies >> Password Policy

SELECT
C.Name AS ReportName,
U.UserName,
C.Path AS ReportPath,
R.RoleName AS Permission
FROM
ReportServer.dbo.Catalog C
JOIN
ReportServer.dbo.PolicyUserRole PUR ON C.PolicyID = PUR.PolicyID
JOIN
ReportServer.dbo.Roles R ON PUR.RoleID = R.RoleID
JOIN
ReportServer.dbo.Users U ON PUR.UserID = U.UserID
WHERE
C.Type = 2 — Seulement les rapports (Type 2 = Report, 1 = Dossier)
AND U.UserName like ‘%Alexandre%’ — Remplacer par le compte à vérifier
ORDER BY
C.Path;

SELECT
t.name AS TableName,
s.name AS StatisticName,
sp.last_updated AS LastUpdated,
sp.rows AS TotalRows,
sp.rows_sampled AS RowsSampled,
sp.modification_counter AS ModificationCounter,
CAST(sp.modification_counter AS FLOAT) * 100 / NULLIF(sp.rows, 0) AS ModificationPercentage,
sp.steps AS HistogramSteps,
CASE
WHEN s.no_recompute = 1 THEN ‘❌ NORECOMPUTE ON’
WHEN sp.rows = 0 THEN ‘⚠️ EMPTY TABLE’
WHEN sp.modification_counter > 0 AND sp.modification_counter < 500 THEN ‘🟢 Minor changes’
WHEN sp.modification_counter > sp.rows * 0.2 THEN ‘🔴 CRITICAL — Update STATISTICS’
WHEN sp.modification_counter > sp.rows * 0.1 THEN ‘🟡 WARNING — Monitor’
ELSE ‘✅ OK’
END AS Status,
s.auto_created, s.user_created, s.has_filter, s.filter_definition
FROM sys.stats s
JOIN sys.tables t ON s.object_id = t.object_id
CROSS APPLY sys.dm_db_stats_properties(s.object_id, s.stats_id) sp
WHERE t.name = ‘Mytable‘ — Replace table name
ORDER BY ModificationPercentage DESC;

UPDATE STATISTICS dbo. Tablename’

ALTER DATABASE MYDB SET QUERY_STORE CLEAR;

— Replace ‘user_name’ by the SQL or Windows login
DECLARE @login_name NVARCHAR(128) = N’user_name’;

DECLARE @sql NVARCHAR(MAX) = N”;

SELECT @sql += N’KILL ‘ + CAST(s.session_id AS NVARCHAR(10)) + N’;’ + CHAR(13)
FROM sys.dm_exec_sessions s
WHERE s.login_name = @login_name
AND s.session_id <> @@SPID; — to not kill your current session

— Optional : print sql commands to run
PRINT @sql;

— Execute KILL commands
EXEC sp_executesql @sql;