What are the essential properties of transactions?
Atomicity
Durability
Consistency
Manageability
Isolation
Co-operativity
A database that's gone through how many normalization forms is usually considered "good enough"?
1
2
3
4
5
What are the benefits of stored procedures?
Execution plan retention/caching
Code reuse
Parameter sniffing
Improved security
What are the types of triggers?
INSTEAD OF
DELAYED
BEFORE
AFTER
Triggers take part in transactions.
Changes to table variables within a scope of a transaction get rolled back when the transaction is rolled back.
One should prefer using CHECK constraints to triggers.
DDL triggers are always AFTER triggers.
It's best practice to build views from other views. This promotes code reuse.
Some views can be used to update underlying tables.
Some views with aggregate functions in them can be used to update the underlying table(s).
An indexed view materializes data in the I/O subsystem and requires a clustered index.
Heaps are tables without a clustered index on them.
It's best practice to put clustered indexes on all tables, even the small ones.
The SCHEMABINDING option used with a view prevents schema changes to any underlying tables.
What is the main benefit of using an index on a table?
It prevents updating table statistics too frequently.
It stores the data in the table in an ordered state.
It makes writing queries easier.
It helps locate rows more quickly and efficiently.
For all intents and purposes, is a clustered index the same as the table itself?
YES
NO
You should always write queries in a way that takes advantage of set-based operations and avoid cursors.
A linked server configuration enables SQL Server to exec commands against an OLE DB data sources on remote servers.
A subquery can be used anywhere an expression can be used.
An INNER JOIN will always return at least one row of data.
It's best practice to always use LEFT OUTER JON instead of RIGHT OUTER JOIN and these two should not be used in the same query for the sake of clarity and ease of understanding.
If two tables, [A] with m rows and [B] with n rows, are CROSS JOINed, the result set has how many rows?
m + n - 1
m * n - 1
m * n
( m - 1 ) * ( n - 1 )
In a FULL OUTER JOIN all of the rows of all of the joined tables are included, whether they are matched or not.
If you SELF JON a table, you have to use table aliases.
What are the types of SQL user-defined functions?
Scalar
Inline table-valued
Procedural
Functional
Multi-statement table-valued
An inline table-valued function is the best type of function from the point of view of function performance.
Multi-statement table-valued functions can have side-effects (e.g., update a table).
You can insert data returned straight from a stored procedure by using the INSERT...EXEC statement.
An identity field can temporarily be disabled (for instance, during a data load) by using one of the SET directives.
When a table is truncated, an identity field is reset to its starting value.
When all the rows in a table are DELETEd, the identity column gets reset to its initial value.
Every table should have a primary key constraint to uniquely identify each row and only one primary key constraint can be created for each table.
It is possible to change the length of a column defined as a PRIMARY KEY constraint without first deleting it and then re-creating it.
Which constraint enforces referential integrity?
UNIQUE KEY constraint
FOREIGN KEY constraint
CHECK constraint
TRIGGER
A CHECK constraint does not come into play if the relevant column receives a NULL value.
One should always prefer CHECK constraints to TRIGGERS.
The UNIQUE constraint is always implemented as a unique index on the relevant column(s).
What is the outcome of the expression under the default settings of SQL Server: SELECT ( 'a' + NULL ) ?
a
NULL
an error is returned
It is best practice not to use query/table hints in production code due to maintenance issues.
Which WHERE clause has the potential to benefit from an index?
WHERE Firstname LIKE '%N'
WHERE Firstname LIKE 'N%'
WHERE Firstname LIKE '%N%'
BCP lets one perform data imports and exports using a command-line utility.
Dirty reads can happen if you use the isolation level of READ COMMITTED.
The SERIALIZABLE isolation level is sufficient to ensure that no phantom rows appear within a transaction.
It is best practice to set FILLFACTOR to 100 (or 0) on an index in a read-only table.
The DENY permission takes precedence over all other permissions that a user might have for an object.
A lock can go from the row level to the page level.
The DELETE command has much more overhead in terms of log activity than TRUNCATE.
It is best practice to specify collation inline within a query.
The collation of a SQL Server can be changed without re-installation once the server has been installed.
The SNAPSHOT isolation level relies heavily on tempdb.
It is best practice to have a clustered index on a column against which range searches/scans are performed.
To improve performance of a view one can try to convert it into an indexed view.
A stale statistics can lead to the optimizer's not picking up an optimal query plan and underestimation of row counts.
Statistics can be created manually and automatically by SQL Server.
When a statistics is updated with the FULLSCAN option, it means that SQL Server will use data across all the rows to infer the distribution of values in the relevant column(s).
What is the outcome of the following query: SELECT 1 WHERE ( 1 = 0 )?
0
empty set (no rows)
Does the ORDER BY clause paired with TOP(100 PERCENT) used in a view guarantee the order of the returned rows?
If you use ORDER BY in a query, what you really get is not a relational set but a cursor.
It is best practice to use UNION ALL wherever possible instead of UNION due to performance reasons.
A deadlock can happen if two pieces of code access the same objects in reverse order at the same time.
Deadlock is a blocking situation but a blocking situation doesn't necessarily have to be a deadlock.
It is best practice to always use UNICODE data types (for textual values) regardless of whether the data comes from a UNICODE source or not.
It is best practice to always store integers as BIGINTs because this frees the developer from thinking about the smallest data type there could be to accommodate all the anticipated values.
The XML data type in SQL Server can be tied to an XML schema but this is not required.
The EXCEPT operator removes all duplicates from the result set and treats two NULL values as being equal.
In the new error-handling construct, TRY...CATCH, it is possible to use the FINALLY block known from other languages.
What does the SET XACT_ABORT ON; directive do?
It ensures that the isolation level of the code following it cannot be changed without raising an error.
It ensures that the developer must handle any rollbacks manually.
It ensures that a transaction is aborted without a rollback when an error is encountered and SQL Server raises error 825 (written to the error log).
It ensures that a transaction is automatically rolled back if an error occurs.
A table-valued variable can be used as an argument to a stored procedure only if it matches a user-defined table type and is marked as READONLY.
A subquery can contain an ORDER BY clause.
To return de-normalized data from a table/tables one can use the PIVOT operator.
To how many levels can you nest stored procedures (and managed code)?
16
32
64
limited only by the memory of the system
You can only have one PRIMARY filegroup per database but as many user-defined filegroups as you want.
It is best practice to only have one log file per database.
Data is written to a log file in a sequential manner.
Log files can be placed into filegroups in much the same way as data files can.
It is best practice to always qualify the name of any object by the containing schema because this saves SQL Server the time it needs to look for this object otherwise.
One can put a non-clustered index an a heap or on a clustered table.
PowerShell cannot be used to change the collation of a server.
PowerShell can execute any SQL query against a SQL Server database.
It is best practice to prefer using ORs to ANDs when building queries.
One can configure log-shipping in such a way that the database to which logs are being shipped is usable for reporting purposes.
What's the outcome of the following: IF ( SELECT 1/0 WHERE ( 1 = 0 ) ) IS NULL PRINT 'A' ELSE PRINT 'B'; ?
error is raised
B
A
Temporary tables can have indexes defined on them and SQL Server can create statistics on them when it deems it appropriate.
A table variable can be pushed out to tempdb.
Parallel query execution plans are always better in terms of performance than single-threaded plans.
SQL Server supports directly a many-to-many relationship between tables.
CHECKPOINTS truncate the log when the database is in the FULL recovery model.
SQL Server supports regular expressions out-of-the-box.
Cardinality issues stem from the fact that statistics are stale and they almost always lead to the optimizer choosing suboptimal query execution plan.
A non-clustered index and tempdb can be created on a separate (physical) drive to improve performance.
Which aggregate function(s) do(es) ignore NULLs?
AVG( [ColumnName] )
SUM( [ColumnName] )
COUNT(*)
COUNT( [ColumnName] )
MAX( [ColumnName] )
COUNT_BIG( [ColumnName] )
Do you have to take a database offline to change the physical location of one of its files?
Can we insert data into a table on which the clustered index has been disabled?
It is best practice to use the WITH RECOMPILE directive for a stored procedure that will be executed infrequently and the data distribution in the table(s) it uses is very different for different parameters.
Which is the preferred way of checking if a table is not empty: 1) ( SELECT COUNT(*) FROM dbo.Table ) > 0 2) EXISTS ( SELECT * FROM dbo.Table ) 3) ( SELECT MAX( [ColumnName] FROM dbo.Table ) IS NOT NULL
1)
2)
3)
SELECT...INTO will never lock system objects.
Does the order of columns in UPDATE statements matter in any way?
What are the special memory resident tables available when dealing with triggers?
DELETED
UPDATED
INSERTED
User-defined functions can raise errors inside their bodies the same way stored procedures can by calling the RAISERROR function.
In which database is the metadata about SQL Server Agent jobs stored?
master
tempdb
msdb
resource
model
Which database(s) should a DBA back up on a regular schedule?
The fastest way to improve a performance of a SELECT query is to add a covering index to the table(s).
Transactions can span multiple batches, that is, pieces of code separated by GO.
Activity Monitor lets you see in real-time the most expensive queries executing on the machine.
It is best practice not to use Common Table Expressions as they usually perform much worse than plain subqueries.
Which function returns data with greater resolution?
GETDATE
SYSDATETIME
Is it true that errors whose severity level is below 11 cannot be handled by the TRY...CATCH construct?
Can the TRY...CATCH block catch object name resolution errors?
Does SELECT...INTO transfer indexes to the new table?
Is it true that each and every user in a database is automatically a member of the public role?
Can the dbo user in a database be denied access to a table?
When data is deleted from a table, SQL Server immediately reduces the size of the table.
Which functions operate on the XML data type in SQL Server?
query()
value()
exists()
is()
modify()
nodes()
length()
datatype()
In which system database are usernames and passwords (if any) stored?
distribution
Which are good properties of a clustered index?
Static
Narrow
Ever-increasing
Random
It is best practice to shrink log files on a regular basis.
Only a log backup can clear the log of inactive transactions and make space inside it reusable when the recovery model of a database is FULL or BULK_LOGGED.
How many different database recovery models does SQL Server support?
19
Online index rebuilds are available in all editions of SQL Server except the Express one.
What's the outcome of the query: SELECT COALESCE(NULLIF(1, 1), 'A')?
conversion error
Which process is the CXPACKET wait type associated with?
Reading data from disk to cache
Executing parallel query plans
Flushing dirty pages to disk
Receiving asynchronous messages via SQL Server Broker
It is best practice to not create indexes on foreign key columns.
It is best practice not to give objects names that contain special characters or spaces.
It is best practice to turn off the AUTO CREATE and AUTO UPDATE of statistics and take care of them manually.
Which one is the preferred way of capturing the last inserted identity value in a session?
@@Indentity
SCOPE_IDENTITY()