Snippets

Table of Contents

SQL

Get Size of All Dbs on Sql Server

with fs
    as
    (
      select database_id, type, (size * 8.0 / 1024 / 1000) size
        from sys.master_files
    )
select
  name,
  (select sum(size) from fs where type = 0 and fs.database_id = db.database_id) datafilesizegb,
  (select sum(size) from fs where type = 1 and fs.database_id = db.database_id) logfilesizegb,
  (select sum(size) from fs where type = 0 and fs.database_id = db.database_id) + (select sum(size) from fs where type = 1 and fs.database_id = db.database_id) totalfilesizegb
  from sys.databases db
 order by totalfilesizegb desc, datafilesizegb desc, logfilesizegb desc

Search and Filter Sp_who2

DECLARE @Table TABLE(
  SPID INT,
  Status VARCHAR(MAX),
  LOGIN VARCHAR(MAX),
  HostName VARCHAR(MAX),
  BlkBy VARCHAR(MAX),
  DBName VARCHAR(MAX),
  Command VARCHAR(MAX),
  CPUTime INT,
  DiskIO INT,
  LastBatch VARCHAR(MAX),
  ProgramName VARCHAR(MAX),
  SPID_1 INT,
  REQUESTID INT
)

INSERT INTO @Table EXEC sp_who2

SELECT * FROM @Table

Search Error Log, Useful for checking progress of restore

xp_readerrorlog 0, 1, N'search-term', NULL, NULL, NULL, N'desc';
GO

You can also leave the search term blank.

Check restore status and completion percent for DB

select d.name, r.start_time, r.status, r.percent_complete, r.command, r.estimated_completion_time
  from sys.dm_exec_requests r
         join sys.databases d on d.database_id = r.database_id
 where d.name = 'db_name'

Check Hours Spent Restoring

select
  name,
  state_desc,
  create_date,
  DATEDIFF(hour, create_date, GETDATE()) as HoursSpentRestoring
  from sys.databases
 where state_desc = 'restoring'

Get Top 3 Rows From Every Table in DB

I find these snippets useful for getting to know a new DB a little better.

Get the top 3 rows of every table.

DECLARE @sql VARCHAR(MAX)='';
SELECT @sql=@sql+'SELECT TOP 3 * FROM '+'['+SCHEMA_NAME(schema_id)+'].['+name+']'+';'
  FROM sys.tables
         EXEC(@sql)

Get the top 3 rows of every table, and print the table name.

DECLARE @sql VARCHAR(MAX)='';
SELECT @sql=@sql+'SELECT TOP 3 '''+name+''' as TableName, t.* FROM '+'['+SCHEMA_NAME(schema_id)+'].['+name+'] t'+';'
  FROM sys.tables
         EXEC(@sql)

Query to Search All Text Columns of Db

DECLARE @Results TABLE(ColumnName nvarchar(370), ColumnValue nvarchar(3630))
DECLARE @SearchStr nvarchar(100) = 'Search-Term'
SET NOCOUNT ON

DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)
SET  @TableName = ''
  SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')

  WHILE @TableName IS NOT NULL
    BEGIN
      SET @ColumnName = ''
        SET @TableName =
        (
          SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
            FROM    INFORMATION_SCHEMA.TABLES
           WHERE       TABLE_TYPE = 'BASE TABLE'
                   AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
                   AND OBJECTPROPERTY(
                     OBJECT_ID(
                       QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
                     ), 'IsMSShipped'
                   ) = 0
        )

        WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)
          BEGIN
            SET @ColumnName =
              (
                SELECT MIN(QUOTENAME(COLUMN_NAME))
                  FROM    INFORMATION_SCHEMA.COLUMNS
                 WHERE       TABLE_SCHEMA    = PARSENAME(@TableName, 2)
                         AND TABLE_NAME  = PARSENAME(@TableName, 1)
                         AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar')
                         AND QUOTENAME(COLUMN_NAME) > @ColumnName
              )

              IF @ColumnName IS NOT NULL
                BEGIN
                  INSERT INTO @Results
                              EXEC
                              (
                                'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630)
                                                                                                           FROM ' + @TableName + ' (NOLOCK) ' +
                                                                                                           ' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2
                              )
                              END
                              END
                              END

                  SELECT distinct ColumnName, ColumnValue FROM @Results

PowerShell

Convert JSON to CSV

$pathToJsonFile = "~/path/to/json/file.json"
$pathToOutputFile = "~/path/for/csv/file.csv"

((Get-Content -Path $pathToJsonFile) | ConvertFrom-Json).results |
  Export-CSV $pathToOutputFile -NoTypeInformation

Create HardLink in Windows 10 Powershell

$link = New-Item -ItemType HardLink -Name .\org\ref\dotfiles\desktop\.spacemacs -Value .\.spacemacs
$link | Select-Object LinkType, Target
$link = New-Item -ItemType HardLink -Name .\org\ref\dotfiles\desktop\.vimrc -Value .\.vimrc
$link | Select-Object LinkType, Target

Run powershell script without changing system execution policy

powershell [-noexit] -executionpolicy bypass -File <Filename>
(defun jbm/powershell-execute-bypass-execution-policy ()
  "set current buffer file to bypass system execution policy on windows for
PowerShell scripts and execute script"
  (interactive)
  (shell-command (concat "powershell -executionpolicy bypass -File " buffer-file-name)))

Az CLI

Get Info about Service Principal

az ad sp show --id service-principal-guid-id

Az cli get users in groups

az ad group member list --group 'group-name' --query [].userPrincipalName

C#

Logging Helper Extension Methods

using System;
using System.Xml;
using System.Xml.Serialization;
using Newtonsoft.Json;
using Formatting = Newtonsoft.Json.Formatting;


internal static class LoggingHelper
{
    public static string ToJson<T>(this T value)
    {
        var settings = new JsonSerializerSettings
        {
            ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
        };
        return JsonConvert.SerializeObject(value, Formatting.Indented, settings);
    }

    public static XmlDocument ToXmlDocument<T>(this T value)
    {
        var document = new XmlDocument();
        var navigator = document.CreateNavigator();

        using (var writer = navigator.AppendChild())
        {
            var serializer = new XmlSerializer(typeof(T));
            serializer.Serialize(writer, value);
        }
        return document;
    }
    /// <summary>
    /// Perform a deep Copy of the object, using Json as a serialisation method. NOTE: Private members are not cloned using this method.
    /// https://stackoverflow.com/questions/78536/deep-cloning-objects
    /// </summary>
    /// <typeparam name="T">The type of object being copied.</typeparam>
    /// <param name="source">The object instance to copy.</param>
    /// <returns>The copied object.</returns>
    public static T CloneJson<T>(this T source)
    {
        // Don't serialize a null object, simply return the default for that object
        if (Object.ReferenceEquals(source, null))
        {
            return default(T);
        }

        // initialize inner objects individually
        // for example in default constructor some list property initialized with some values,
        // but in 'source' these items are cleaned -
        // without ObjectCreationHandling.Replace default constructor values will be added to result
        var deserializeSettings = new JsonSerializerSettings { ObjectCreationHandling = ObjectCreationHandling.Replace };

        return JsonConvert.DeserializeObject<T>(JsonConvert.SerializeObject(source), deserializeSettings);
    }

    public static XmlNode[] ToXmlDataNode<T>(this T messageData)
    {
        var xDoc = new XmlDocument();
        var dataXmlElement = xDoc.CreateElement("data");
        dataXmlElement.InnerText = messageData.ToJson();
        xDoc.AppendChild(dataXmlElement);
        return new XmlNode[] { xDoc };
    }
}

Vim

Convert lines of XML in Buffer to XML file

Useful when you copy and paste SQL column of XML type and want each to have it's own file.

:g/./execute '.w'.line('.').xml'