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)

The ALTER TABLE statement conflicted with the FOREIGN KEY constraint. The conflict occurred in database , table , column

Error message:
The ALTER TABLE statement conflicted with the FOREIGN KEY constraint. The conflict occurred in database , table , column
Explanation:
Some foreign values do not exist in primary table.
Solution:
Make your table empty, or add the associated value to the primary key table.

A query to find the missing values:
SELECT F.* FROM ForeignTableName F
LEFT JOIN PrimaryTableName P on F.FKcolumn = P.PKcolumn
WHERE P.PKcolumn is null

Search for a text including special characters in SQL Server

1. Delimits the special character with square brackets:
Examples:
for '%' we will write:
SELECT * FROM TableName WHERE ColumnName LIKE '%[%]%'
for the text 'UPDATE [TABLENAME]' , that already contain square brackets, we will delimit the open bracket:
select o.name from ..... where text like '%UPDATE [[]TABLENAME]%'

2. Use a custom escape character:
Examples:
for '%' we will write:
SELECT * FROM TableName WHERE ColumnName LIKE '%\%%' ESCAPE '\'
and for 'UPDATE [TABLENAME]' we will write:
select o.name from ..... where text like '%\UPDATE [TABLENAME]%' ESCAPE '\'

Note: you can protect the code from SQL Injection using ESCAPE: 

IF UPDATE

IF UPDATE (ColumnName)

Uses in Triggers: return True if the column was updated.

Note: An update means that the query has SET the value of the column:
UPDATE TableName SET ColumnName = ColumnName --> UPDATE (ColumnName)=TRUE
UPDATE TableName SET ColumnName = 10 --when ColumnName already =10 --> UPDATE (ColumnName)=TRUE

Get Dependencies of a table

select distinct sd.id, so.name, so.Type, sd.depid, so_dep.name, so_dep.Type
from  sys.sysdepends sd
inner join sys.objects so on so.object_id = sd.id 
and SCHEMA_NAME(so.schema_id) = 'dbo'
inner join sys.objects so_dep on so_dep.object_id = sd.depid 
where so_dep.name = 'TABLENAME'
order by so.name

Select the last IDENTITY

SELECT @@IDENTITY will return the last identity value entered into a table in your current session.
SELECT SCOPE_IDENTITY() will return the last identity value created in the current session, in the current scope.
SELECT IDENT_CURRENT(‘TABLENAME’) will return the last identity value entered into tablename in your current session, and not only in the current scope.

When using @@IDENTITY, situation that another user will insert newer identity than us can occured, and this can cause us some problems...

@@IDENTITY - current session.
SCOPE_IDENTITY() - current session + current scope.
IDENT_CURRENT(‘TABLENAME’) - current session + specific table.


Select triggers of a table

SELECT name,OBJECT_NAME(parent_object_id) 
FROM sys.objects 
WHERE type = 'TR' 
AND SCHEMA_NAME(schema_id) = 'dbo'
AND OBJECT_NAME(parent_object_id) = 'TABLENAME'

List of tables with data

SELECT SCHEMA_NAME(schema_id) as SchemaName, 
so.name as TableName, 
MAX(si.rows) as Row_Count
FROM sys.objects so 
INNER JOIN sysindexes si on si.id = so.object_id 
WHERE so.type = 'U' 
GROUP BY so.object_id, so.name, so.schema_id
HAVING MAX(si.rows) > 0