If you like my tips, buy me a coffee ❤️☕️
I believe that it is my responsibility to transfer the knowledge I gathered through the years of my experience with MSSQL
Get table sizes and more information
SELECT
t.NAME AS TableName,
s.Name AS SchemaName,
p.rows,
SUM(a.total_pages) * 8 AS TotalSpaceKB,
CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS TotalSpaceMB,
SUM(a.used_pages) * 8 AS UsedSpaceKB,
CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB,
(SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB,
CAST(ROUND(((SUM(a.total_pages) - SUM(a.used_pages)) * 8) / 1024.00, 2) AS NUMERIC(36, 2)) AS UnusedSpaceMB
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
TotalSpaceMB DESC, t.Name
Step by step Install SQL Server 2022 Standard on Linux: Ubuntu 22.04
In this experiment was done on PROXMOX CT using the template: ubuntu-22.04-standard_22.04-1_amd64.tar.zst
Prerequisites
apt install curl
apt install gpg
Get APT sources key
curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg
cp /usr/share/keyrings/microsoft-prod.gpg /etc/apt/trusted.gpg.d/
Get APT sources list for MSSQL
curl -fsSL https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-2022.list | tee /etc/apt/sources.list.d/mssql-server-2022.list
Install MSSQL-server
apt update
apt install -y mssql-server
Configure MSSQL-server
ACCEPT_EULA='Y' MSSQL_PID='Standard' MSSQL_SA_PASSWORD='<STRONG_PASSWORD>' MSSQL_TCP_PORT=1433 /opt/mssql/bin/mssql-conf setup
Check MSSQL-server service
systemctl status mssql-server
Get APT sources list for MS-tools on linux
curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list | tee /etc/apt/sources.list.d/ms-prod.list
Install MSSQL linux tools
apt update
apt install -y mssql-tools18 unixodbc-dev
Enable MSSQL-Agent
/opt/mssql/bin/mssql-conf set sqlagent.enabled true
systemctl restart mssql-server
Find a string in all MSSQL tables
DECLARE @SearchStr NVARCHAR(100) = '%******%' -- Change this, keep the %%
DECLARE @Results TABLE (TableName NVARCHAR(128), ColumnName NVARCHAR(128), FoundValue NVARCHAR(MAX))
DECLARE @TableName NVARCHAR(256), @ColumnName NVARCHAR(128), @SQL NVARCHAR(MAX)
DECLARE TableCursor CURSOR FOR
SELECT QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME), COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE IN ('char', 'nchar', 'varchar', 'nvarchar', 'text', 'ntext')
OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @TableName, @ColumnName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = 'SELECT ''' + @TableName + ''', ''' + @ColumnName + ''', CAST(' + QUOTENAME(@ColumnName) + ' AS NVARCHAR(MAX)) ' +
'FROM ' + @TableName + ' WHERE ' + QUOTENAME(@ColumnName) + ' LIKE ''' + @SearchStr + ''''
INSERT INTO @Results (TableName, ColumnName, FoundValue)
EXEC sp_executesql @SQL
FETCH NEXT FROM TableCursor INTO @TableName, @ColumnName
END
CLOSE TableCursor
DEALLOCATE TableCursor
SELECT * FROM @Results