------------------------------------------------------
-- 1. Solutions to common issues
------------------------------------------------------
-- Resolving the "Divide by zero" error (by example)
DECLARE @denominator INT
SET @denominator = 0
--SELECT 1 / 0
SELECT 1 / ISNULL(NULLIF(@denominator, 0), 1)
------------------------------------------------------
--Handling the error “The conversion of a char data type to a datetime data 
--type resulted in an out-of-range datetime value”
--Change the default language to “us_english” for the given SQL Server login:
USE [master];
ALTER LOGIN "LOGIN_NAME" WITH DEFAULT_LANGUAGE = us_english;
--Best practice: Always use the ISO date format in your data applications/T-SQL scripts: YYYY-MM-DD
------------------------------------------------------
--Handling the error “Database [Database_Name] cannot be upgraded because it is read-only 
--or has read-only files”
--Make sure that the user account on which the SQL Server instance database engine is 
--running has full access to the database files.
------------------------------------------------------
-- 2. Basic String Functions
------------------------------------------------------
-- Returns @length characters from @expression starting from @start_index
SELECT SUBSTRING(@expression, @start_index, @length)
SELECT SUBSTRING('This is a Test', 1, 4)
-- Finds the given @pattern in the @string and replaces it with the @replacement_string
SELECT REPLACE(@string, @pattern, @replacement_string)
SELECT REPLACE('This is a Test', 'Test', 'New Test')
-- Returns the size of @string in terms of number of characters
SELECT LEN(@string)
SELECT LEN('This is a Test')
-- Returns the first @num_chars characters of the @string counting from the left
SELECT LEFT(@string, @num_chars)
SELECT LEFT('This is a Test',4)
-- Returns the first @num_chars characters of the @string counting from the right
SELECT RIGHT(@string, @num_chars)
SELECT RIGHT('This is a Test',4)
-- Removes the leading blank spaces
SELECT LTRIM(@expression)
SELECT LTRIM(' This is a Test')
-- Removes the trailing blank spaces
SELECT RTRIM(@expression)
SELECT RTRIM('This is a Test ')
------------------------------------------------------
-- 3. Performance-Related Tips
------------------------------------------------------
-- Avoiding locking when reading data (however, dirty reads are allowed)
-- You need to take into consideration, possible dirty-read issues when using this approach
SELECT [columnName]
FROM [tableName] WITH (NOLOCK)
------------------------------------------------------
-- Rebuild a specific index with using parameters
USE [DATABASE_NAME];
ALTER INDEX [INDEX_NAME] ON [SCHEMA.TABLE]
REBUILD WITH (FILLFACTOR=[FILL_FACTOR_VALUE_BETWEEN_0_100], ONLINE=[ON|OFF]);
-- Rebuild all indexes in a table with using parameters
USE [DATABASE_NAME];
ALTER INDEX ALL ON [SCHEMA.TABLE]
REBUILD WITH (FILLFACTOR=[FILL_FACTOR_VALUE_BETWEEN_0_100], ONLINE=[ON|OFF]);
------------------------------------------------------
-- Updating database tables without causing blocking
-- You need to take into consideration, possible dirty-read issues when using this approach
UPDATE [TABLE_NAME] WITH (READPAST)
SET …
WHERE …
------------------------------------------------------
-- 4. Maintenance-Related Tips
------------------------------------------------------
-- Truncating a data/log file
USE [DBName];
DBCC SHRINKFILE ([Data_Log_LogicalName],TRUNCATEONLY);
-- Renaming a Windows login
ALTER LOGIN "[Domain or Server Name]\[Windows Username]"
WITH NAME="[New Domain or New Server Name]\[Windows Username]";
-- Renaming a SQL Server login
ALTER LOGIN "[SQL Server Login Name]"
WITH NAME="[New SQL Server Login Name]";
-- Creating Logins for orphaned SQL Server users
USE [DBName];
EXEC sp_change_users_login 'Auto_Fix', '[UserName]', NULL, '[Password]';
-- Changing the Database Owner in a SQL Server Database (SQL Login)
USE [DBName];
EXEC sp_changedbowner '[SQL_Login_Name]';
-- Changing the Database Owner in a SQL Server Database (Windows Login)
USE [DBName];
EXEC sp_changedbowner '[DomainNameUserName]'
