Page 1 of 22
SQL Server Interview Questions
1. SQL Server Versions
Version Release Date Release Name
1.0 (OS/2) 1989 SQL Server 1.0 (16-bit)
1.1 (OS/2) 1990 SQL Server 1.1 (16-bit)
4.2A (OS/2) 1992 SQL Server 4.2A
4.2B (OS/2) 1993 SQL Server 4.2B (16-bit)
4.21a (WinNT) 1993 SQL Server 4.21a
6 1995 SQL Server 6.0
6.5 1996 SQL Server 6.5
7 1998 SQL Server 7.0
- 1999 SQL Server 7.0 OLAP Tools
8 2000 SQL Server 2000
8 2003 SQL Server 2000 64-bit Edition
9 14-Jan-06 SQL Server 2005
10 06-Nov-08 SQL Server 2008
10.25 2010 Azure SQL database (initial release)
10.5 20-Jul-10 SQL Server 2008 R2
11 20-May-12 SQL Server 2012
12 2014 Azure SQL database
12 05-Jun-14 SQL Server 2014
13 01-Jun-16 SQL Server 2016
14 29-Sep-17 SQL Server 2017
15 04-Nov-19 SQL Server 2019
Page 2 of 22
2. New Features of SQL Server 2016.
Many new features related to DBA and Azure
(a) Multiple TempDB support (Configure at the time of installation)
(b) Temporal Table Concept
Holds older version of rows within base table
Why Temporal Tables:
Auditing
Rebuilding the data in case of inadvertent changes
Projecting and reporting for historical trend analysis
Protecting the data in case of accidental data loss
Example:
CREATE TABLE dbo.AuditWithTemporalTable
(
Emp_ID INT IDENTITY PRIMARY KEY
, EMP_FirstName NVARCHAR (50)
, TimeStart datetime2 (2) GENERATED ALWAYS AS ROW START NOT NULL
, TimeEnd datetime2 (2) GENERATED ALWAYS AS ROW END NOT NULL
, PERIOD FOR SYSTEM_TIME (TimeStart, TimeEnd)
)
WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.AuditWithTemporalTableHistory));
(c) Row Level Security
(a) Show rows based on user (by create table valued function & SECURITY POLICY)
(d) Dynamic Data Masking (Like hide Mobile Number digits)
(e) R- Integration (Can run R-code inside the SQL Server)
(f) JSON Support (Ability to parse JSON data)
(g) Always Encrypted Data (Encrypt data based on Encrypted Keys)
(h) Two New String Functions-
(i) STRING_ESCAPE
(b) Escapes special characters and returns text with escaped character, used in JSON
(ii) STRING_SPLIT (Table Valued Function)
STRING_SPLIT(string, separator)
Page 3 of 22
3. New Features of SQL Server 2017.
(a) Can be installed on Linux and Docker Container
(b) Graph database Support (Can create NODE & EDGES , can store data having complex
relationship)
(c) Python Support (Good for data scientist to perform machine learning)
(d) Resumable Online Index Rebuild (Good if you have limited maintenance window,
pause)
(e) New String Functions
CONCAT_WS (returns STRING, min-3 max 254 values allowed, avoid NULL
values)
CONCAT_WS ( separator, argument1, argument1 [, argumentN]… )
Select CONCAT_WS('|', 'Test 1', 'Test 2',NULL, 'Test 3', 5)
Output: Test1|Test2|Test3|5
STRING_AGG (concatenates the values of string expression and put
separator value between them)
STRING_AGG (expression, separator)
SELECT STRING_AGG (FirstName, ',') AS FirstNames FROM Employee;
Output: Saurabh,Mayank,Raghav
TRANSLATE
It replaces some character set of input string (VARCHAR, CHAR, NVARCHAR,
NCHAR) with destination set of characters. It returns string.
TRANSLATE ( inputString, characters, translations)
Declare @Original VARCHAR(50) = '5*[6-4]/{8+2}'
Declare TRANSLATE(@Original, '[]{}', '()()');
Output: 5*(6-4)/(8+2)
TRIM (equivalent to LTRIM(RTRIM(@inputstring)))
Page 4 of 22
4. New Features of SQL Server 2019.
This version of SQL Server was mainly developed to put the focus on scalability,
intelligence, performance, security, and also the key point is data exchange between
distributed file systems like Hadoop, Apache spark, connecting with Big Data.
(a) Big Data Analytics containers with Kubernetes images as well.
(b) Error Messages
'VERBOSE_TRUNCATION_WARNINGS' – SET ON/OFF
1. 'String or binary data would be truncated in table 'Table Name', column 'Colu
mn name'.
2. Truncated value: 'Value'.
(c) Vulnerability Assessment
Easy to implement security compliance such as GDPR (General Data
Protection Regulation)
(d)UTF-8 Support
We can now create a char or varchar column to store UTF-8 data.
UTF-8: Unicode Transformation Format-8 bit
(e) Online Index CREATE Operations
ALTER INDEX index_name ON table_name sUREBUILD WITH (ONLINE = ON);
(f) Big Data Clusters
Data virtualization - Combine data from many sources without data
movement. It improves security and performance to process data.
Managed SQL Server, Spark, and Data Lake - Store high volume data in a data
lake and access it easily using either SQL or Spark. It is very easy to manage
using management services, admin portal, and integrated security.
Complete AI platform - Easily feed integrated data and prepare the solution.
This solution works to operate all models in one system.
Page 5 of 22
5. SQL Data Types.
Exact numeric SQL Server data type
Upper
Data Type Lower Range Range Storage Remarks
Bit 0 1 1 byte We can also store NULL values in this.
We can store whole numbers up to 255 in
tinyint 0 255 1 byte this data type.
We can store whole numbers between a
Smallint -2^15 2^15-1 2 bytes lower and higher range.
It also stores the whole number similar to a
smallint but its lower and upper limits
Int −2^31 2^31−1 4 bytes changes as defined.
We should use bigint data type if we cannot
Bigint −2^63 2^63−1 8 bytes accommodate data in the integer data type.
It depends upon We use decimal data type for scale and fixed
precision. precision numbers.
1 – 9 -> 5 bytes
10-19->9 bytes
20-28->13 bytes
Decimal −10^38+1 10^381−1 29-28->17 bytes
It depends upon
precision.
1 – 9 -> 5 bytes
10-19->9 bytes
20-28->13 bytes Decimal and numeric are synonyms. We can
Numeric −10^38+1 10^381−1 29-28->17 bytes use them interchangeably.
Smallmone We can use this data type for monetary or
y -214478.3648 214478.3647 4 bytes currency values.
+922,337,
−922,337, 203,
203, 685,477.580
Money 685,477.5808 7 8 bytes
Page 6 of 22
Approximate numeric SQL Server data type
Data Type Lower Range Upper Range Storage Remarks
We can use float924) as ISO synonym
Real −3.40E+38 3.40E+38 4 bytes for real.
Its storage
depends upon
value (n) It is an Approximate-number data types.
N(1-24) ->4 bytes The default value of N is 53.
Float(n) −1.79E+308 1.79E+308 N(25-53)->8 bytes
Date and Time SQL Server Data types
Data Type Lower Range Upper Range Storage Remarks
1. It stores only dates in SQL Server.
2. Its default value is 1900-01-01.
3. It provides default format
Date 0001-01-01 9999-12-31 3 bytes YYYY-MM-DD.
1. We can define a date along with
time with fractional seconds.
2. The default value for this data type
is 1900-01-01 00:00:00.
3.It provides accuracy in increments
of .000, .003, or .007 seconds.
4. We should avoid using this data
Datetime 1753-01-01 9999-12-31 8 bytes type. We can use Datetime2 instead.
1. the default format for this is YYYY-
MM-DD hh:mm: ss[.fractional
6-8 bytes seconds].
1. Precision<3 -> 2. It provides precision from 0 to 7
6 bytes digits, with an accuracy of 100ns.
0001-01-01 9999-12-31 2.Precision 3 or 2. The default precision for datetime2
Datetime2 00:00:00 23:59:59.9999999 4-> 7 bytes is 7 digits.
1. It is similar to a datetime2 data type
but includes time zone offset as well.
Datetimeoffse 0001-01-01 9999-12-31 2. Timezone offset is -14:00 through
t 00:00:00 23:59:59.9999999 10 bytes +14:00.
1. It defines a date with the time of the
day.
2. Its default value is 1900-01-01
00:00:00.
1900-01-01 3. It provides an accuracy of one
smalldatetime 00:00:00 2079-06-06 23:59:59 4 bytes minute.
1. We can use it for storing only time
data.
2. Its default format is
hh:mm:ss[.nnnnnnn].
00:00:00.000 3. It provides an accuracy of 100
Time 0000 23:59:59.9999999 5 bytes nanoseconds.
Page 7 of 22
Character Strings SQL Server Data types
Data Type Lower Range Upper Range Storage Remarks
1. It provides a fixed-width character data
Char(n) 0 characters 8000 characters N bytes type.
Varcha n bytes + 2 1.It is a variable length character data type.
r(n) 0 characters 8000 characters bytes 2.N defines the string size.
We should avoid using this data type unless
Varchar n bytes + 2 required due to its huge storage
(max) 0 characters 2^31 chars bytes ~ 2 GB requirement.
1. It is a variable-length character data
type.
2. We should avoid using this data type as it
n bytes + 4 might get deprecated in future versions of
Text 0 chars 2,147,483,647 chars bytes SQL Server.
Unicode character string SQL Server data types
Data Type Lower Range Upper Range Storage Remarks
4000
Nchar 0 characters characters 2 times n bytes It is a Unicode string of fixed width.
Nvarchar 0 chars 4000 Chars 2 times n bytes Nvarchar is a Unicode string of variable width.
1. It is a Variable-length Unicode data
1,073,741,82 2 times the string 2. We should avoid using this data type as it will
Ntext 0 chars 3 char length be deprecated in future SQL releases.
Binary SQL Server data types
Data Type Lower Range Upper Range Storage Remarks
Binary 0 bytes 8000 bytes N bytes This data type is a fixed-width binary string.
Its storage is the
actual length of
varbinary 0 bytes 8000 bytes string + 2 bytes.
2,147,483,64 Avoid using this data type, as it will be
Image 0 bytes 7 bytes deprecated in future SQL Server releases.
Page 8 of 22
6. Computed column in SQL Server.
Columns with some user-defined expression or with some formula to calculate the
corresponding columns with operators or with some query. Example: Age is computed
column.
1. Create table CalculationTable
2. (
3. ID INT IDENTITY(1,1) PRIMARY KEY,
4. NAME NVARCHAR(50) null,
5. DATEOFBIRTH DATE null,
6. AGE AS (DATEDIFF(YEAR,DATEOFBIRTH,GETDATE()))
7. )
7. Change Data Capture (CDC) In SQL Server.
Supported by all versions higher than SQL Server 2008. To implement CDC we first need to
enable CDC on a database
1. -- To Enable CDC
2. USE [CDC_TEST]
3. GO
4. EXEC sys.sp_cdc_enable_db
5. GO
Now to enable CDC on the table-
1. USE [CDC_TEST]
2. EXEC sys.sp_cdc_enable_table
3. @source_schema = 'dbo', -- Is the name of the schema to which the sou
rce table belongs.
4. @source_name = 'Customer', -- Is the name of the source table on whic
h to enable change data capture
5. @role_name = NULL -- Is the name of the database role used to gat
e access to change data, we can mention null if we want all the users h
aving access to the database to view the CDC data
Querying the cdc table is not advisable by Microsoft, therefore create a table valued
function
Once CDC is enabled, we cannot change the Primary Key of the table, truncate the
table.
Adding/Removing column, disable CDC then re-enable it.
It many impact the application performance, so enable when needed.
Page 9 of 22
8. How to fetch data from Oracle/any DB in SQL Server
Using Linked Server.
Linked Servers have the following components,
An OLE DB provider
An OLE DB data source
Linked Servers Benefits,
Allow to access data from outside of SQL Servers
It has the ability to perform distributed queries including select, update as well as
other commands and transactions across heterogeneous data sources.
It has the ability to address different databases similarly.
9. What is TempDB?
Global resource used by everyone and everything inside SQL Server.
Non-durable, meaning that the database is recreated every time SQL Service
restarts.
10. What are relationships in SQL Server database?
Relationships are created by linking the column in one table with the column in
another table.
One-to-One Relationship (Example: Person & PAN CARD)
Many-to-One Relationship (Example: Person & Car)
Many-to-Many Relationship (Example: Person & Address)
11. What is a Check in SQL?
A Check Constraint is a rule that identifies valid values for columns of data. A Check
Constraint helps to enforce Domain Integrity. If the condition in a Check Constraint is not
satisfied, then it prevents the value from entering into the database.
Syntax:
1. Create table tableName(Column1 dataType Check(expression), Column2, col
umnN)
Example:
create table emp(empId int check(empId >10),empName varchar(15))
Page 10 of 22
12. Schema Binding in SQL Server
It shows that UDF/View is strictly bound to Database Object(s).
Also improve performance of query execution plan.
When a object is SchemaBound, query optimizer doesn’t generate unnecessary
spool operators for Query execution plan.
If you want to create index on view then your view must be Schema bound.
Cannot DROP or ALTER table.
1. CREATE VIEW vw_Test WITH SCHEMABINDING AS
2. SELECT * FROM dbo.tblUser;
1. CREATE FUNCTION dbo.fnGetUserID (@name varchar(10))
2. RETURNS INT
3. WITH RETURNS NULL ON NULL INPUT,
4. SCHEMABINDING AS
5. BEGIN
6. DECLARE @tempID INT
7. SELECT @tempID = ID
8. FROM dbo.tblUser
9. WHERE FirstName = @name;
10.
11. RETURN @tempID;
12. END;
13. SQL Server Indexed Views
An indexed view has a unique clustered index.
Used for complex processing of large numbers of rows, such as aggregating lots of
data, or joining many rows.
It can’t be created without Schema binding option
It is not compulsory that query optimizer always uses this clustered index, query
optimizer can use another execution plan that it finds more efficient compared to
clustered index.
To force the query optimizer to use the “Clustered Index” always use “NOEXPAND “
option like below:
SELECT * FROM VI_DEMO WITH (NOEXPAND);
Best suited for indexed views - data warehouses, data marts, OLAP databases
Less suited for indexed views - transactional environment
14. Data Warehouse – Schemas
Page 11 of 22
Star Schema
In a Star schema, there is only one fact table and multiple dimension tables.
In a Star schema, each dimension is represented by one-dimension table.
Dimension tables are not normalized in a Star schema.
Each Dimension table is joined to a key in a fact table.
Snowflakes Schema
Unlike in the Star schema, the dimension’s table in a snowflake schema are
normalized.
Due to the normalization in the Snowflake schema, the redundancy is reduced and
therefore, it becomes easy to maintain and the save storage space.
Fact Constellation Schema (Galaxy Schema)
Page 12 of 22
A fact constellation has multiple fact tables. It is also known as a Galaxy Schema.
Ref: https://www.tutorialspoint.com/cognos/data_warehouse_schemas.htm
15. Difference between DELETE, TRUNCATE, and DROP
Statements
16. How To Check If A String Contains A Substring In
SQL Server
Page 13 of 22
Using CHARINDEX() function
CHARINDEX(substring, string, start)
Using LIKE Predicate
17. Differences between STUFF, REPLACE and
SUBSTRING
STUFF
STUFF(string, start, length, new_string)
REPLACE
REPLACE(string, old_string, new_string)
SUBSTRING
SUBSTRING(string, start, length)
SELECT
STUFF('ABCDEE12EE',4,5,'_STUFF') AS STUFF,
REPLACE ('ABCDEE12EE','EE','REPLACE') AS REPLACE,
SUBSTRING ('ABCDEE12EE', 2, 2) AS SUBSTRING
18. Difference between operational systems (OLTP) and
data warehouse (OLAP)
Typical relational databases are designed for on-line transactional processing (OLTP)
and do not meet the requirements for effective on-line analytical processing (OLAP).
As a result, data warehouses are designed differently than traditional relational
databases.
Page 14 of 22
19. Master Slave System Design
Advantages of Master/Slave Design
Availability
Performance
Failover alleviating
Problem with Master/Slave Design
If user changed his username, the request goes to master database, but it takes some
time to replicate in slave database.
20. Differences Between SQL and NoSQL
Page 15 of 22
21. Mathematical Numeric Functions in SQL Server
2012
ABS (number) Function
Ignore a negative number or value
CEILING (number) Function
Rounds up a number to the next whole number, regardless of the
decimal portion of a number.
Floor (number) Function
Opposite of the ceiling function
Returns the largest integer value that is greater than or equal to the
specified numeric expression
SQUARE (float_number) Function
Returns the square of the given expression
ROUND Function
Round a positive or negative value to a specific length
ROUND (numeric_exp, length)
IsNumeric (Expression) Function
Used to check whether something is a valid numeric type or not
1
DEGREES (numeric_expression) Function
Determine the angle in degrees of the specified number expression.
22. What is Collation? What are the different types of
Collation Sensitivity?
Collation refers to a set of rules that determine how data is sorted and compared. Rules
defining the correct character sequence are used to sort the character data. It incorporates
options for specifying case-sensitivity, accent marks, kana character types and character
width. Below are the different types of collation sensitivity:
Case sensitivity: A and a are treated differently.
Accent sensitivity: a and á are treated differently.
Kana sensitivity: Japanese kana characters Hiragana and Katakana are treated
differently.
Width sensitivity: Same character represented in single-byte (half-width) and
double-byte (full-width) are treated differently.
Page 16 of 22
23. New Conversion Function in SQL Server 2012
TRY_CAST
TRY_CAST takes the value and tries to convert it to the given data type
If casting fails, returns NULL
--Simple TRY_CAST example
SELECT TRY_CAST('10.25' AS FLOAT) --Output:
10.25
SELECT TRY_CAST ('This my test' AS INT) AS output; --Output:
NULL
--Simple TRY_CAST with error
SELECT TRY_CAST( 15.34 AS XML)
--Error: Explicit conversion from data type float to xml is not allowed.
TRY_CONVERT
Returns a value in the specified data type
If CONVERT failed, returns NULL
--Simple TRY_CONVERT example
SELECT TRY_CONVERT(FLOAT , '10.25') --
Output:10.25
SELECT TRY_CONVERT (INT , 'This my test') AS output; --
Output: NULL
--Simple TRY_CONVERT with error
SELECT TRY_CONVERT(XML , 15.34)
--Erorr: Explicit conversion from data type float to xml is not allowed.
PARSE
Translates an expression into a requested data type.
-Simple PARSE example with Date time
SELECT PARSE('Monday, 3 Octomber 2013' AS datetime2 USING 'en-US)
--Output : 2013-10-03 00:00:00.0000000
-- PARSE example with currency symbol
SELECT PARSE('$128.34' AS FLOAT USING 'en-US) --Output:
128.34
TRY_PARSE.
Similar to the PARSE function except the TRY_PARSE function does
not throw an error.
If the conversion fails, then this function returns the NULL
Page 17 of 22
24. SQL Server Performance Tuning Tips
Never use Select * Statement:
Use Appropriate Datatype
Store image path instead of the image itself
USE Common Table Expressions (CTEs) instead of Temp table
Avoid Use of Temp table
Use Stored Procedure
Use If Exists to determine the record
Avoid Cursors
SET NOCOUNT ON
Always create an index on the table
Use Try–Catch
Practice to use Schema Name
Never Use ” Sp_” for User Define Stored Procedure
Use Appropriate Naming Convention
Drop Index before Bulk Insertion of Data
Use Unique Constraint and Check Constraint
Use View for complex queries
Make Transaction short
Use Count(1) instead of Count(*) and Count(Column_Name):
Use Between instead of In
Use Small data type for Index
Normalize tables in a database
Keep Clustered Index Small
Remove Unused Index
Use UNION ALL instead of UNION
Page 18 of 22
Use Index Name in Query
o SELECT
o e.Emp_IId,
o e.First_Name,
o e.Last_Name
o FROM dbo.EMPLOYEE e
o WITH (INDEX (Clus_Index))
o WHERE e.Emp_IId > 5
o Select Limited Data
Avoid Correlated Queries
o Select Name, City, (Select Company_Name
o from
o Company where companyId=cs.CustomerId) from Customer cs
Use Sparse Column
Sparse columns provide better performance for NULL and Zero data.
It takes less space
o Create Table Table_Name
o (
o Id int, //Default Column
o Group_Id int Sparse // Sparse Column
o )
Avoid Null value in the fixed-length field
Use Foreign Key with the appropriate action
Use Alias Name
Use Transaction Management
Select Limited Data
Importance of Column Order in index
Recompiled Stored Procedure
Avoid Loops In Coding
Avoid index and join hints
Use Index for required columns
Don't use Index
When the size of the table is very small.
The index is not used in the query optimizer
DML(insert, Update, Delete) operations are frequently used.
Column contains TEXT, nText type of data.
Use Full-text Index
Page 19 of 22
Ref: https://www.c-sharpcorner.com/article/sql-server-performance-tuning-tips/
25. Delete Duplicate Data in SQL Server
Using CTE (Common Table Expression)
;WITH duplicateData AS
(
SELECT id,name, ROW_NUMBER() OVER(PARTITION BY id ORDER
BY id) AS rowno FROM #DeleteData
)
DELETE duplicateData WHERE rowno >1
Using Temporary Table
SELECT * INTO #temp FROM #DeleteData
TRUNCATE TABLE #DeleteData
INSERT INTO #DeleteData
SELECT ID, NAME FROM #temp
GROUP BY ID, NAME
By Adding Identity Column
ALTER TABLE #DeleteData ADD rowNo int identity(1,1)
DELETE #DeleteData
WHERE
rowno not in(select min(rowno) from #DeleteData group by id,Name)
ALTER TABLE #DeleteData DROP COLUMN rowNo
Delete duplicate rows using an intermediate table
In SSIS, we can use SORT transformation, there is a checkbox to remove duplicates.
26. Cursor in SQL
Active Set:
o The set of rows the cursor holds is called the active set.
Why to avoid cursor:
SQL Server instances' memory
reduce concurrency
decrease network bandwidth
lock resources
Cursor Alternatives:
WHILE loop
sub queries
Temporary tables
Table variables
Types of Cursors in SQL
Static
Dynamic
Page 20 of 22
Forward Only
Keyset Driven
Static Cursors
o Slower and use more memory in comparison to other cursor
o Should be used it only if scrolling is required and other cursors are not suitable.
o No UPDATE, INSERT, or DELETE operations are reflected in a static cursor
o By default, static cursors are scrollable.
o SQL Server static cursors are always read-only.
Dynamic Cursors
o Allows data updating, deletion and insertion.
o By default, dynamic cursors are scrollable.
Forward Only Cursors
o Fastest cursor among all cursors
o It doesn't support backward scrolling.
o Allows update, delete data
Keyset Driven Cursors
o Controlled by a set of unique identifiers as the keys in the keyset.
o The keyset depends on all the rows that qualified the SELECT statement.
o Allows update, delete operations.
o By default, keyset driven cursors are scrollable.
Ref: https://www.dotnettricks.com/learn/sqlserver/sql-server-different-types-of-cursors
27. Magic Tables in SQL Server 2012
Invisible tables or virtual tables.
Allow you to hold inserted, deleted and updated values
These are the two Magic Tables: Inserted, Deleted
Interesting fact, can be used without triggers
CREATE TABLE Table1 (ID1 INT, Col1 VARCHAR(100))
CREATE TABLE Table2 (ID2 INT, Col2 VARCHAR(100))
CREATE TABLE Table3 (ID2 INT, Col2 VARCHAR(100))
INSERT INTO Table1 (ID1, Col1)
OUTPUT inserted.ID1, inserted.Col1 INTO Table2
VALUES(1,'Col'), (2, 'Col2')
SELECT * FROM Table1
SELECT * FROM Table2
DELETE from Table1
OUTPUT deleted.ID1, deleted.Col1 INTO Table3
Where ID1=1
SELECT * FROM Table1
SELECT * FROM Table3
Page 21 of 22
28. TOP WITH TIES Clause in SQL Server 2012
Additional rows will be included if their values match, or tie, the values of the last row
29. What is UPDATE_STATISTICS command?
Used to update the indexes on the tables when there is a large amount of deletions or
modifications or bulk copy occurred in indexes.
30. What is the use of FOR Clause?
Page 22 of 22
Used for XML and browser options. This clause is mainly used to display the query
results in XML format or in browser.
31. Ds
https://www.c-sharpcorner.com/article/hide-and-
group-columns-in-ssrs-using-a-parameter/
32. Ds
33. Ds
https://www.c-sharpcorner.com/UploadFile/7d3362/
ssrs-parameter-validation-using-custom-code/
34. Ds
35.
http://thesqlgeek.com/2015/05/ssis-package-configurations-with-sql-encryption/