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 XML source does not validate the data in the XML file against the XSD

Important to know:

The SSIS "XML source" element check validation of the input XML file,
but – check only the structure, not the data!
That mean not valid data will pass this validation check!

Is it good or not?
Depend on the case.

But don't forget it…

Get plans of a Stored Procedure

Select  PS.total_logical_reads/NullIf(DateDiff(Minute,PS.cached_time,GetDate()),0) N,
        Coalesce(DB_Name(PS.database_id),DB_Name(PSh.dbid),DB_Name(PSph.dbid))
        DBName,
        Object_Schema_Name(Coalesce(PS.object_id,PSh.objectid,PSph.objectid),Coalesce(PS.database_id,PSh.dbid,PSph.dbid))
        SchemaName,
        Coalesce(Object_Name(PS.object_id,PS.database_id),Object_Name(PSh.objectid,PSh.dbid),Object_Name(PSph.objectid,PSph.dbid))
        ObjectName,
        PS.*,
        PSh.text,
        PSph.query_plan
From    (Select Object_Name(object_id), *
        From    sys.dm_exec_procedure_stats (NoLock)
        Where   database_id=DB_ID('DatabaseName')
                And Object_Schema_Name(object_id)='SchemaName'
                And Object_Name(object_id)='SpName'
        Order By total_logical_reads/NullIf(DateDiff(Minute,cached_time,GetDate()),0) Desc) PS
Outer Apply sys.dm_exec_sql_text(PS.sql_handle) PSh
Outer Apply sys.dm_exec_query_plan(PS.plan_handle) PSph;

Pivot Table With Multiple Column Aggregates

CREATE TABLE #DoublePivot
(      [ID] INT IDENTITY(1,1) NOT NULL,
       [UserID] INT NOT NULL,
       [SomeType] INT NOT NULL,
       [NumberA] INT NOT NULL,
       [NumberB] INT NOT NULL,
       [Created] DATETIME NOT NULL DEFAULT(getdate())
)

INSERT INTO #DoublePivot
       (      UserID, SomeType, NumberA, NumberB )
       VALUES
       (      1, 1, 20, 10 ),
       (      1, 2, 50, 20 ),
       (      1, 1, 10, 0),
       (      2, 1, 10, 10),
       (      2, 2, 10, 40),
       (      1, 1, 20, 20),
       (      2, 2, 20, 70);

SELECT * FROM #DoublePivot order by UserID, SomeType

SELECT UserID, SomeType, SUM(NumberA) as SumNumberA, SUM(NumberB) as SumNumberB FROM #DoublePivot Group by UserID, SomeType order by UserID, SomeType
                                 
       SELECT UserID,
                     MAX([1]) AS SomeType1_NumberA,
                     MAX([-1]) AS SomeType1_NumberB,
                     MAX([2]) AS SomeType1_NumberB ,
                     MAX([-2]) AS SomeType2_NumberB
       FROM
                     (      SELECT UserID,
                                         SomeType,
                                         (-1 * SomeType) as SomeTypeB,
                                         SUM(NumberA) AS NumberA,
                                         SUM(NumberB) AS NumberB
                           FROM #DoublePivot
                           GROUP BY UserID, SomeType
                     )  BaseTable
                     PIVOT
                     (      SUM(NumberA)
                           FOR SomeType IN ([1], [2])
                     ) AS PivotA
                     PIVOT
                     (      SUM(NumberB)
                           FOR SomeTypeB IN ([-1], [-2])
                     ) AS PivotB
       GROUP BY UserID

DROP TABLE #DoublePivot

*  (-1 * SomeType) - in order to set a new "base" column to the second pivot summary.



"Automatic" extended events - system_health

After SQL Server installation, A default extended events session - system health – is created.
System health runs without any noticeable performance effects, and collect some important events:
  • Deadlocks
  • Sessions that have waited on locks, waits, etc.
  • More….
See all in:


I use it to catch deadlocks graph, and it was very helpful!

You can also filters events.
If you don’t remember the exact event name, you can type part of it:


After you get the results and see the event you need, you can specify the filter by it:





SSIS error: The SQL command requires a parameter named, which is not found in the parameter mapping

SSIS error message:
The SQL command requires a parameter named "@aaaa", which is not found in the parameter mapping.

Cause and Solutions:
1. The parameter is really not exists. Solution: declare it.
2. Space - " " - in the mapping pf the parameter - see the picture below. Solution: delete the space.


OUTPUT Clause for the MERGE Statements

MERGE ....
USING...
WHEN ...
WHEN ...
...
OUTPUT
   $action,
   inserted.*,
   deleted.*;

Get the number of rows in tables

In order to get the number of rows in tables you can simply run count(*).
But:
1. You need to run it for each table in the database.
2. Fot big tables - it takes time.

So. use thos query in order to get the number of rows in tables, or in one table - set WHERE clause on the table name or ID.

; WITH rCnt AS
(
       SELECT p.object_id, SUM(p.rows) as RowsCount
       FROM sys.partitions p
       WHERE p.index_id IN (0,1) -- heap or clustered index
       GROUP BY p.object_id, OBJECT_NAME(p.object_id)
)
SELECT SCHEMA_NAME(t.schema_id) AS SchemaName,
       t.name as TableName,
       rCnt.RowsCount
FROM   rCnt
JOIN   sys.tables t  ON t.object_id = rCnt.object_id