UniqueKey: Die Werte eines UNIQUE KEY Index sind eindeutig. Ein NULL Wert kann genau einmal gespeichert werden.
PrimaryKey: Die Werte eines PRIMARY KEY Index, sind eindeutig und nicht NULL. NULL ist nicht zulässig.
SQL Server konvertiert Daten (und schneidet diese notfalls auch ab) wo dies angebracht erscheint. Wenn zu einem VARCHAR Wert konvertiert wird explizit oder implizit) und dieser zu gross für die Spalte ist, wird SQL Server * einfügen.
Weitere Informationen stehen in der Onlinehilfe unter CAST und CONVERT.
Danke an David Burrows für diesen Tip.
CREATE TABLE #test
(
col1 VARCHAR(2)
)
GO
INSERT INTO #test(col1) VALUES('15')
INSERT INTO #test(col1) VALUES(15)
INSERT INTO #test(col1) VALUES('157')
INSERT INTO #test(col1) VALUES(157)
SELECT
*
FROM
#test
DROP TABLE #test
(1 row(s) affected)
(1 row(s) affected)
Server: Nachr.-Nr. 8152, Schweregrad 16, Status 9, Zeile 3
Zeichenfolgen- oder Binärdaten werden abgeschnitten.
Die Anweisung wurde beendet.
(1 row(s) affected)
col1
----
15
15
*
(3 row(s) affected)
Diese Frage ist auch ein Kandidat für die "Häufigste Frage". Dabei kann man sehr häufig die abstrusesten Antworten beobachten. Natürlich kann man dieses Problem mit Hilfe eines Cursors lösen. Stellt sich nur nachher die Frage, wie man das Problem des Cursors los wird.
USE pubs
GO
SELECT
DATEDIFF(DAY, pubdate, GETDATE()) AS Anzahl_Tage
FROM
titles
GO
Anzahl_Tage
-----------
4761
4764
4743
4751
4764
4755
1418
4743
3665
1418
4630
4758
4646
4761
4761
4630
4761
4761
(18 row(s) affected)
Im Bezug auf das Transaktionsprotokoll des SQL Servers scheint es eine ziemliche Unsicherheit bei den meisten Anwendern zu geben. Dabei ist dies bei weitem kein Mysterium!
USE MASTER GO SELECT CASE OBJECTPROPERTY(id, 'IsMSShipped') WHEN 1 THEN 'Bei Installation erzeugt' WHEN 0 THEN 'Nicht bei Installation erzeugt' END AS [Bei Installation Erzeugt] , CAST(name AS CHAR(30)) AS [name] FROM sysobjects WHERE name = 'sp_helpdb' OR name = 'sp_MBL_SORT' Bei Installation Erzeugt name ------------------------------ ------------------------------ Bei Installation erzeugt sp_helpdb Nicht bei Installation erzeugt sp_MBL_SORT (2 row(s) affected)
SELECT
OBJECT_NAME(Id) as [Table]
, name as [Column]
, TYPE_NAME(xusertype) as Type
FROM SysColumns
WHERE TYPE_NAME(xusertype)
IN ('varchar','char')
AND ID IN
(SELECT ID
FROM SysObjects
WHERE xtype = 'U')
ORDER BY OBJECT_NAME(Id), Name
Die Ergebnismenge wird hier nicht wiedergegeben, da sie in der Regel sehr umfangreich ist. Ändert man
WHERE xtype = 'U')
in
WHERE xtype = 'P')
erhält man das Ergebnis für Gespeicherte Prozeduren.