Labels

admin (1) aix (1) alert (1) always-on (2) Architecture (1) aws (3) Azure (1) backup (3) BI-DWH (10) Binary (3) Boolean (1) C# (1) cache (1) casting (3) cdc (1) certificate (1) checks (1) cloud (3) cluster (1) cmd (7) collation (1) columns (1) compilation (1) configurations (7) Connection-String (2) connections (6) constraint (6) copypaste (2) cpu (2) csv (3) CTE (1) data-types (1) datetime (23) db (547) DB2 (1) deadlock (2) Denali (7) device (6) dotNet (5) dynamicSQL (11) email (5) encoding (1) encryption (4) errors (124) excel (1) ExecutionPlan (10) extended events (1) files (7) FIPS (1) foreign key (1) fragmentation (1) functions (1) GCP (2) gMSA (2) google (2) HADR (1) hashing (3) in-memory (1) index (3) indexedViews (2) insert (3) install (10) IO (1) isql (6) javascript (1) jobs (11) join (2) LDAP (2) LinkedServers (8) Linux (15) log (6) login (1) maintenance (3) mariadb (1) memory (4) merge (3) monitoring (4) MSA (2) mssql (444) mssql2005 (5) mssql2008R2 (20) mssql2012 (2) mysql (36) MySQL Shell (5) network (1) NoSQL (1) null (2) numeric (9) object-oriented (1) offline (1) openssl (1) Operating System (4) oracle (7) ORDBMS (1) ordering (2) Outer Apply (1) Outlook (1) page (1) parameters (2) partition (1) password (1) Performance (103) permissions (10) pivot (3) PLE (1) port (4) PostgreSQL (14) profiler (1) RDS (3) read (1) Replication (12) restore (4) root (1) RPO (1) RTO (1) SAP ASE (48) SAP RS (20) SCC (4) scema (1) script (8) security (10) segment (1) server (1) service broker (2) services (4) settings (75) SQL (74) SSAS (1) SSIS (19) SSL (8) SSMS (4) SSRS (6) storage (1) String (35) sybase (57) telnet (2) tempdb (1) Theory (2) tips (120) tools (3) training (1) transaction (6) trigger (2) Tuple (2) TVP (1) unix (8) users (3) vb.net (4) versioning (1) windows (14) xml (10) XSD (1) zip (1)

Cannot create a row of size which is greater than the allowable maximum row size of

Error message:
Cannot create a row of size 8066 which is greater than the allowable maximum row size of 8060.

The case:
I tried to alter a column from nvarchar(max) to nvarchar(1500).
I run:
UPDATE MyTable set Col1 = Left(Col1, 1500) where len(Col1) > 1500
ALTER TABLE [dbo].[MyTable] ALTER COLUMN [Col1] [nvarchar](1500) NULL
And I get the error message for the ALTER TABLE statement.

Solution:
ALTER TABLE [dbo].[MyTable] REBUILD -- before  the ALTER COLUMN statement.

Find column dependency

select OBJECT_NAME(k.parent_object_id) as parentTable,
c1.name as parentColumn, 
OBJECT_NAME(k.referenced_object_id) as referencedTable, 
c2.name as referencedColumn,
k.name
from  sys.foreign_keys k
join sys.foreign_key_columns f on f.parent_object_id = k.parent_object_id
join sys.columns c1 on c1.column_id = f.parent_column_id
and c1.object_id = k.parent_object_id
join sys.columns c2 on c2.column_id = f.referenced_column_id
and c2.object_id = k.referenced_object_id
where   c2.name = 'ColumnName'
and     OBJECT_NAME(k.referenced_object_id) = 'TableName'

select top n WITH TIES

"WITH TIES" is a case of TOP:

SELECT TOP N WITH TIES  ... 
FROM Table Name ORDER BY  ColumnA

WITH TIES Specifies that additional rows (more than N) be returned from the base result set with the same value of the last of the TOP N. 

Example:

Top 3 - returns exactly 3 records. Which one from the 4 records that can be chosen?  who knows...
Top 3 With Ties - returns with the third record all the appropriate records.

Notes:
  • WITH TIES can return more than N records. It's important to remember it.
  • WITH TIES is used only with ORDER BY clause. If we don't use the ORDER BY clause an error will be generated.

Missing Index Script

The Author is Pinal Dave:

-- Original Author: Pinal Dave (C) 2011
SELECT TOP 25
dm_mid.database_id AS DatabaseID,
dm_migs.avg_user_impact*(dm_migs.user_seeks+dm_migs.user_scans) Avg_Estimated_Impact,
dm_migs.last_user_seek AS Last_User_Seek,
OBJECT_NAME(dm_mid.OBJECT_ID,dm_mid.database_id) AS [TableName],
'CREATE INDEX [IX_' + OBJECT_NAME(dm_mid.OBJECT_ID,dm_mid.database_id) + '_'
+ REPLACE(REPLACE(REPLACE(ISNULL(dm_mid.equality_columns,''),', ','_'),'[',''),']','') +
CASE
WHEN dm_mid.equality_columns IS NOT NULL AND dm_mid.inequality_columns IS NOT NULL THEN '_'
ELSE ''
END
+ REPLACE(REPLACE(REPLACE(ISNULL(dm_mid.inequality_columns,''),', ','_'),'[',''),']','')
+ ']'
+ ' ON ' + dm_mid.statement
+ ' (' + ISNULL (dm_mid.equality_columns,'')
+ CASE WHEN dm_mid.equality_columns IS NOT NULL AND dm_mid.inequality_columns IS NOT NULL THEN ',' ELSE
'' END
+ ISNULL (dm_mid.inequality_columns, '')
+ ')'
+ ISNULL (' INCLUDE (' + dm_mid.included_columns + ')', '') AS Create_Statement
FROM sys.dm_db_missing_index_groups dm_mig
INNER JOIN sys.dm_db_missing_index_group_stats dm_migs
ON dm_migs.group_handle = dm_mig.index_group_handle
INNER JOIN sys.dm_db_missing_index_details dm_mid
ON dm_mig.index_handle = dm_mid.index_handle
WHERE dm_mid.database_ID = DB_ID()
ORDER BY Avg_Estimated_Impact DESC
GO

Data Type Precedence

When an operator combines two expressions of different data types, the rules for data type precedence specify that the data type with the lower precedence is converted to the data type with the higher precedence.
This conversion can have a big influence regarding performance.

For the precedence order for data types see:

Errors while Indexed View creation

Here are fer errors (and solutions...) while Indexed View creation.

Error: 
Cannot schema bind view because name is invalid for schema binding. Names must be in two-part format and an object cannot reference itself
Solution:
Add schema to the objects names.

Error:
Cannot schema bind view 'dbo.MyView'. 'dbo.OtherView' is not schema bound.
Solution:
Use tables, not views. 
Another solution: Create the other views 'WITH SCHEMABINDING' also.

Error: 
Cannot create index on view . The view contains a self join on
Solution:
Sorry, no solution...... :-(

Indexed View creation

To create indexed view it's the simpler than we cam imaging...
Just add an index on the view:
CREATE UNIQUE CLUSTERED INDEX [IX_V_IndexName] ON [dbo].[MyView]
(
Col1 DESC, 
Col2 DESC
)
GO