Showing posts with label SQL. Show all posts
Showing posts with label SQL. Show all posts

2008-03-13

SET ANSI_NULLS ON / OFF

Mit SET ANSI_NULLS wird das Verhalten mit NULL-Werten festgelegt, wenn innerhalb einer WHERE-Bedingung die Vergleichsoperatoren „=“ und „<>“ verwendet werden.

SET ANSI_NULLS ON mit der Bedingung WHERE MiddleName = NULL liefert keine Datensätze zurück.

SET ANSI_NULLS ON
SELECT Title, FirstName, MiddleName
FROM Person.Contact
WHERE MiddleName = NULL

Title FirstName MiddleName
-------- ----------------------------- --------------------------------------------------

(
0 row(s) affected)



Die Bedingung für die Ermittlung der Datensätze mit NULL-Werten kann wie folgt aussehen:




SET ANSI_NULLS ON
SELECT Title, FirstName, MiddleName
FROM Person.Contact
WHERE MiddleName IS NULL

Title FirstName MiddleName
-------- ----------------------------- --------------------------------------------------
Mr. Gustavo NULL
Ms. Kim
NULL
Sr. Humberto
NULL
Sra. Pilar
NULL
Mr. Jay
NULL
Mr. François
NULL
Ms. Kim
NULL
Ms. Michelle
NULL
Mr. Michael
NULL
Mr. John
NULL
...
(
8499 row(s) affected)



SET ANSI_NULLS OFF mit der Bedingung WHERE MiddleName = NULL liefert die gleichen Datensätze wie WHERE MiddleName IS NULL zurück.



SET ANSI_NULLS OFF
SELECT Title, FirstName, MiddleName
FROM Person.Contact
WHERE MiddleName
= NULL

Title FirstName MiddleName
-------- ----------------------------- --------------------------------------------------
Mr. Gustavo NULL
Ms. Kim NULL
Sr. Humberto NULL
Sra. Pilar NULL
Mr. Jay NULL
Mr. François NULL
Ms. Kim NULL
Ms. Michelle NULL
Mr. Michael NULL
Mr. John NULL
...
(
8499 row(s) affected)


In SQL-Server 2005-Dokumentation wird drauf hingewiesen, dass dieses Feature in einer zukünftigen Version von Microsoft SQL Server entfernt wird. Daher wird empfohlen, dieses Feature bei neuen Anwendungen nicht zu verwenden.

2007-11-03

Query Operatoren (Query Operators) und SQL-Befehle (SQL-Commands)

Query Operator > SQL-Befehl
---------------------------

Aggregate > (Exception)
All > WHERE
Any > WHERE IN
AsEnumerable >
AsQueryable >
Average > AVG
Cast >
Concat > UNION ALL
Contains > WHERE IN
Count > COUNT
DefaultIfEmpty >
Distinct > SELECT DISTINCT
ElementAt >
ElementAtOrDefault >
Empty >
Except > WHERE NOT IN
First >
FirstOrDefault > SELECT TOP 1 ORDER BY
GroupBy > GROUP BY
GroupJoin > LEFT OUTER JOIN
GroupJoin > RIGHT OUTER JOIN
Intersect > WHERE IN
Join > INNER JOIN
Last >
LastOrDefault > SELECT TOP 1 ORDER BY DESC
Like >
LongCount > COUNT
Max > MAX
Min > MIN
OrderBy > ORDER BY
OrderByDescending > ORDER BY DESC
Range >
Repeat >
Reverse > (Exception)
Select > SELECT
SelectMany > CROSS JOIN
SelectMany > INNER JOIN
SelectMany > LEFT OUTER JOIN
SequenceEqual >
Single >
SingleOrDefault >
Skip > NOT IN
SkipWhile > (Exception)
Sum > SUM
Take > TOP n
TakeWhile > (Exception)
ThenBy > ORDER BY
ThenByDescending > ORDER BY DESC
ToArray >
ToDictionary >
ToList >
ToLookup >
Union > UNION
Where > WHERE

2007-06-24

SQL Statements als String oder LINQ Befehle

SQL Statements als String in einer C# Programm implementieren ist nicht etwas aussergewöhnliches.

Das Problem hier war, dass die SQL Statements während der Kompilierungszeit vom Kompiler nicht geprüft wurden, ob die Syntaktisch korrekt waren oder nicht.

Mit LINQ werden die SQL Statement ähnliche Befehle als C# Code impelemtiert. Diese Befehle werden während des Kompiliervorgangs unseres Programmes geprüft.

Diese Befehle sehen wie eine Art objektorientiertes SQL aus. Die SQL Statements sind nicht mehr einfache Strings sondern diese bestehen aus C# Befehlen, welche erst mit .NET Framework 3.5 zur Verfügung stehen werden.

Und das bedeutet, dass die IntelliSense und Typenüberprüfung auch für die LINQ Befehle gilt.

Es hat für Visual Studio 2005 eine LINQ Version gegeben. Aber ich bin mir nicht sicher, ob nach der Erscheinung von Orcas, weiterhin Visual Studio 2005 unterstützt wird oder nicht.

Özgür Aytekin