2010-04-27 10 views
5

In Bezug auf SQL-Leistung.Wie ich BIT in SQL Server 2005 verwenden sollte

Ich habe eine skalare Funktion zum Überprüfen bestimmter Bedingungen in der Basis, es gibt BIT-Wert für True oder False zurück.

Ich weiß jetzt nicht, wie ich sollte @BIT Parameter

Wenn ich schreibe, füllen.

set @bit = convert(bit,1) 

oder

set @bit = 1 

oder

set @bit='true' 

Funktion wird auf jeden Fall arbeiten, aber ich weiß nicht, welche Methode für den täglichen Gebrauch empfohlen.

Eine andere Frage, ich habe Tabelle in meiner Basis mit etwa 4 Millionen Datensätze, täglich einfügen ist etwa 4K Datensätze in dieser Tabelle.

Jetzt möchte ich CONSTRAINT auf die Tabelle mit skalaren Wertfunktion, die ich bereits

So etwas wie dieses

ALTER TABLE fin_stavke 
ADD CONSTRAINT fin_stavke_knjizenje CHECK (dbo.fn_ado_chk_fin(id)=convert(bit,1)) 

erwähnt hinzuzufügen, wobei „id“ ist der Primärschlüssel der Tabelle fin_stavke und dbo.fn_ado_chk_fin sieht aus wie

Wird dieser Typ und die Methode der Überprüfung der Einschränkung beeinträchtigt Leistung auf meinem Tisch und SQL überhaupt beeinträchtigen?

Wenn es auch einen besseren Weg gibt, um die Kontrolle über diese Tabelle hinzuzufügen, lass es mich wissen.

+0

Ein Bit wird als 0 oder 1 zugewiesen. Wenn Sie also @bit als Bit deklarieren, sollten Sie set @bit = 1 verwenden oder @bit = 0 setzen, hätte ich gedacht. – Lazarus

+0

MSSQL ist es egal, auf welche Weise Sie es einstellen. Sie können es auf 'wahr' setzen, dann vergleichen Sie es mit 1, und SQL wird es nicht kümmern. – DForck42

Antwort

4

Ich könnte falsch liegen, aber aus der Optik davon, es scheint, dass Sie nur überprüfen möchten, dass nicht doc_id und protocol_idNULL sind?

Sie können eine Tabellenbeschränkung hinzufügen, um dies zu erreichen.

ALTER TABLE fin_stavke 
ADD CONSTRAINT fin_stavke_knjizenje CHECK (doc_id IS NOT NULL OR protocol_id IS NOT NULL) 
+0

Sie sind völlig richtig – adopilot

+0

+1, was ich dachte, aber nur wenn fin_stavke.id ist einzigartig, das scheint eine vernünftige Annahme in diesem Fall –

+1

@adopilot - gedruckt und umrahmt Ihren Kommentar. Es wird nützlich sein, wenn ich mich das nächste Mal mit meiner Frau streite. –

1

Ich habe immer Bit als 1 oder 0 verwendet. Ich würde dabei bleiben. Jeder wird wissen, was du tust.

Diese Einschränkung wirkt sich auf die Leistung Ihrer Einfügungen aus, aber nicht sehr, da Sie nach dem Primärschlüssel der Tabelle suchen. Es ist wahrscheinlich die billigste Suche, die Sie machen können.

2

würde ich

set @bit = 1 

verwenden Es ist sicher (Zuordnung wahr ein bisschen fühlt sich falsch) und wandeln nur sinnlos scheint.

1

Ein Bit-Variable kann mit einem ganzzahligen Wert eingestellt werden:

set @bit = 1 

Manchmal möchte man einen Wert tatsächliche Bit die implizite Konvertierung zu vermeiden, dann können Sie eine excplicit Umwandlung tun:

set @bit = cast(1 as bit) 

Bei der Zuweisung zu einer Variablen gibt es keinen praktischen Unterschied, aber in einer Abfrage würde die Konvertierung stattfinden, wenn die Abfrage geparst wird und nicht, wenn sie ausgeführt wird. Ich habe es ein paar Mal verwendet und habe tatsächliche Leistungsunterschiede.