it-swarm.com.de

Versteckte Funktionen von SQL Server

Was sind einige versteckte Funktionen von SQL Server ?

Zum Beispiel undokumentierte gespeicherte Systemprozeduren, Tricks, um Dinge zu tun, die sehr nützlich, aber nicht ausreichend dokumentiert sind?


Antworten

Vielen Dank an alle für die tollen Antworten !

Gespeicherte Prozeduren

  • sp_msforeachtable: Führt einen Befehl mit '?' wird durch jeden Tabellennamen ersetzt (ab v6.5)
  • sp_msforeachdb: Führt einen Befehl mit '?' wird durch jeden Datenbanknamen ersetzt (ab Version 7)
  • sp_who2: genau wie sp_who, aber mit viel mehr Informationen zur Fehlerbehebung bei Blöcken (ab Version 7)
  • sp_helptext: Wenn Sie den Code einer gespeicherten Prozedur möchten, zeigen Sie & UDF an
  • sp_tables: gibt eine Liste aller Tabellen und Ansichten der Datenbank im Gültigkeitsbereich zurück.
  • sp_stored_procedures: gibt eine Liste aller gespeicherten Prozeduren zurück
  • xp_sscanf: Liest Daten aus der Zeichenfolge in die von jedem Formatargument angegebenen Argumentpositionen.
  • xp_fixeddrives: : Findet das feste Laufwerk mit dem größten freien Speicherplatz
  • sp_help: Wenn Sie die Tabellenstruktur, Indizes und Einschränkungen einer Tabelle kennen möchten. Auch Ansichten und UDFs. Abkürzung ist Alt + F1

Snippets

  • Zeilen werden in zufälliger Reihenfolge zurückgegeben
  • Alle Datenbankbenutzerobjekte nach Datum der letzten Änderung
  • Nur Rückgabedatum
  • Suchen Sie nach Datensätzen, deren Datum in die aktuelle Woche fällt.
  • Finden Sie Datensätze, deren Datum letzte Woche aufgetreten ist.
  • Gibt das Datum für den Beginn der aktuellen Woche zurück.
  • Gibt das Datum für den Anfang der letzten Woche zurück.
  • Zeigen Sie den Text einer Prozedur an, die auf einem Server bereitgestellt wurde
  • Unterbrechen Sie alle Verbindungen zur Datenbank
  • Tabellenprüfsumme
  • Zeilenprüfsumme
  • Löschen Sie alle Prozeduren in einer Datenbank
  • Ordnen Sie die Anmelde-IDs nach der Wiederherstellung korrekt zu
  • Rufen Sie gespeicherte Prozeduren von einer INSERT-Anweisung aus auf
  • Suchen von Prozeduren nach Schlüsselwort
  • Löschen Sie alle Prozeduren in einer Datenbank
  • Fragen Sie das Transaktionsprotokoll für eine Datenbank programmgesteuert ab.

Funktionen

  • HashBytes ()
  • EncryptByKey
  • PIVOT-Befehl

Sonstiges

  • Verbindungszeichenfolge Extras
  • TableDiff.exe
  • Trigger für Anmeldeereignisse (neu in Service Pack 2)
  • Steigern Sie die Leistung mit permanent berechneten Spalten (pcc).
  • DEFAULT_SCHEMA-Einstellung in sys.database_principles
  • Erzwungene Parametrisierung
  • Vardecimal Storage Format
  • Finden Sie die beliebtesten Abfragen in Sekundenschnelle heraus
  • Skalierbare gemeinsam genutzte Datenbanken
  • Filterfunktion für Tabellen/gespeicherte Prozeduren in SQL Management Studio
  • Fahnen verfolgen
  • Nummer nach einem GO wiederholt den Stapel
  • Sicherheit mit Schemas
  • Verschlüsselung mit integrierten Verschlüsselungsfunktionen, Ansichten und Basistabellen mit Triggern
215
Sklivvz

In Management Studio können Sie nach einer GO-Stapelendemarkierung eine Nummer einfügen, damit der Stapel so oft wiederholt wird:

PRINT 'X'
GO 10

Gibt 10 mal 'X' aus. Dies erspart Ihnen mühsames Kopieren/Einfügen bei sich wiederholenden Arbeiten.

91
GilM

Viele SQL Server-Entwickler scheinen immer noch nichts über die OUTPUT-Klausel (SQL Server 2005 und höher) zu wissen die DELETE-, INSERT- und UPDATE-Anweisung.

Es kann äußerst nützlich sein zu wissen, welche Zeilen INSERTED, UPDATEd oder DELETEd sind, und die OUTPUT-Klausel ermöglicht dies sehr einfach - sie ermöglicht den Zugriff auf die "virtuellen" Tabellen mit den Namen inserted und deleted (wie bei Triggern):

DELETE FROM (table)
OUTPUT deleted.ID, deleted.Description
WHERE (condition)

Wenn Sie Werte in eine Tabelle mit einem INT IDENTITY-Primärschlüsselfeld einfügen, können Sie mit der OUTPUT-Klausel die eingefügte neue ID sofort abrufen:

INSERT INTO MyTable(Field1, Field2)
OUTPUT inserted.ID
VALUES (Value1, Value2)

Und wenn Sie aktualisieren, kann es äußerst nützlich sein, zu wissen, was sich geändert hat. In diesem Fall steht inserted für die neuen Werte (nach dem UPDATE), während deleted auf die alten Werte verweist das Update:

UPDATE (table)
SET field1 = value1, field2 = value2
OUTPUT inserted.ID, deleted.field1, inserted.field1
WHERE (condition)

Wenn viele Informationen zurückgegeben werden, kann die Ausgabe von OUTPUT auch in eine temporäre Tabelle oder eine Tabellenvariable (OUTPUT INTO @myInfoTable).

Extrem nützlich - und sehr wenig bekannt!

Marc

70
marc_s

sp_msforeachtable: Führt einen Befehl mit '?' wird durch jeden Tabellennamen ersetzt. z.B.

exec sp_msforeachtable "dbcc dbreindex('?')"

Sie können bis zu 3 Befehle für jede Tabelle eingeben

exec sp_msforeachtable
    @Command1 = 'print ''reindexing table ?''',
    @Command2 = 'dbcc dbreindex(''?'')',
    @Command3 = 'select count (*) [?] from ?'

Ebenfalls, sp_MSforeachdb

52
Mitch Wheat

Extras für Verbindungszeichenfolgen:

MultipleActiveResultSets = true;

Dadurch liest ADO.Net 2.0 und höher mehrere schreibgeschützte Forward-Only-Ergebnismengen in einer einzelnen Datenbankverbindung. Dies kann die Leistung verbessern, wenn Sie viel lesen. Sie können es auch dann aktivieren, wenn Sie eine Mischung aus Abfragetypen ausführen.

Anwendungsname = MyProgramName

Wenn Sie nun eine Liste der aktiven Verbindungen anzeigen möchten, indem Sie die sysprocesses-Tabelle abfragen, wird der Name Ihres Programms in der program_name-Spalte anstelle von ".Net SqlClient Data Provider" angezeigt.

51
Chris Wenham

TableDiff.exe

  • Mit dem Tool "Tabellendifferenz" können Sie Unterschiede zwischen einer Quell- und Zieltabelle oder einer Ansicht erkennen und abgleichen. Tablediff Utility kann Unterschiede in Bezug auf Schema und Daten melden. Das beliebteste Feature von tablediff ist die Tatsache, dass es ein Skript generieren kann, das Sie auf dem Ziel ausführen können, um Unterschiede zwischen den Tabellen auszugleichen.

Link

33
Sklivvz

Eine weniger bekannte TSQL-Technik zum Zurückgeben von Zeilen in zufälliger Reihenfolge:

-- Return rows in a random order
SELECT 
    SomeColumn 
FROM 
    SomeTable
ORDER BY 
    CHECKSUM(NEWID())
31
Mitch Wheat

In Management Studio können Sie schnell eine durch Kommas getrennte Liste von Spalten für eine Tabelle abrufen, indem Sie:

  1. Erweitern Sie im Objekt-Explorer die Knoten unter einer bestimmten Tabelle (damit Ordner für Spalten, Schlüssel, Abhängigkeiten, Trigger usw. angezeigt werden).
  2. Zeigen Sie auf den Ordner Spalten und ziehen Sie ihn in eine Abfrage.

Dies ist praktisch, wenn Sie kein abscheuliches Format verwenden möchten, das durch Klicken mit der rechten Maustaste auf die Tabelle und Auswählen von Skripttabelle als ... und dann Einfügen in ... zurückgegeben wird. Dieser Trick funktioniert mit den anderen Ordnern, die Sie erhalten Eine durch Kommas getrennte Liste der im Ordner enthaltenen Namen.

30
Thomas

Zeilenkonstruktoren

Sie können mehrere Datenzeilen mit einer einzigen Einfügeanweisung einfügen.

INSERT INTO Colors (id, Color)
VALUES (1, 'Red'),
       (2, 'Blue'),
       (3, 'Green'),
       (4, 'Yellow')
23
Rob Boek

HashBytes () , um den MD2-, MD4-, MD5-, SHA- oder SHA1-Hash seiner Eingabe zurückzugeben.

22
Joel Coehoorn

Wenn Sie die Tabellenstruktur, Indizes und Einschränkungen kennen möchten:

sp_help 'TableName'
22
Eduardo Molteni

Herausfinden der beliebtesten Abfragen

  • Mit sys.dm_exec_query_stats können Sie viele Kombinationen von Abfrageanalysen mit einer einzigen Abfrage ermitteln.

Link mit dem Commnad

select * from sys.dm_exec_query_stats 
order by execution_count desc
20
Sklivvz
17
Martin Smith

Ich weiß, es ist nicht genau versteckt, aber nicht zu viele Leute kennen den Befehl PIVOT . Ich konnte eine gespeicherte Prozedur ändern, die Cursor verwendete, und brauchte 2 Minuten, um einen schnellen 6-Sekunden-Code zu erhalten, der ein Zehntel der Anzahl der Zeilen betrug!

16
BoltBait

EXCEPT und INTERSECT

Anstatt aufwendige Verknüpfungen und Unterabfragen zu schreiben, sind diese beiden Schlüsselwörter eine viel elegantere Kurzform und lesbare Möglichkeit, die Absicht Ihrer Abfrage beim Vergleich zweier Abfrageergebnisse auszudrücken. Neu ab SQL Server 2005, ergänzen sie stark die UNION, die es in der TSQL-Sprache bereits seit Jahren gibt.

Die Konzepte von EXCEPT, INTERSECT und UNION sind grundlegend in der Mengenlehre, die als Grundlage und Grundlage für die relationale Modellierung aller modernen RDBMS dient. Jetzt können Venn-Diagrammergebnisse mit TSQL intuitiver und einfacher generiert werden.

16
Ray Vega

nützlich beim Wiederherstellen einer Datenbank zu Testzwecken oder was auch immer. Ordnet die Login-IDs neu zu:

EXEC sp_change_users_login 'Auto_Fix', 'Mary', NULL, 'B3r12-36'
16
Kolten

Unterbrechen Sie alle Verbindungen zur Datenbank:

Use Master
Go

Declare @dbname sysname

Set @dbname = 'name of database you want to drop connections from'

Declare @spid int
Select @spid = min(spid) from master.dbo.sysprocesses
where dbid = db_id(@dbname)
While @spid Is Not Null
Begin
        Execute ('Kill ' + @spid)
        Select @spid = min(spid) from master.dbo.sysprocesses
        where dbid = db_id(@dbname) and spid > @spid
End
15
GateKiller

Tabellenprüfsumme

Select CheckSum_Agg(Binary_CheckSum(*)) From Table With (NOLOCK)

Zeilenprüfsumme

Select CheckSum_Agg(Binary_CheckSum(*)) From Table With (NOLOCK) Where Column = Value
15
GateKiller

Wenn Sie den Code einer gespeicherten Prozedur möchten, können Sie:

sp_helptext 'ProcedureName'

(Ich bin mir nicht sicher, ob es ein verstecktes Feature ist, aber ich benutze es die ganze Zeit)

14
Eduardo Molteni

Ein Trick mit gespeicherten Prozeduren besteht darin, dass Sie sie von einer INSERT-Anweisung aus aufrufen können. Ich fand das sehr nützlich, als ich an einer SQL Server-Datenbank arbeitete.

CREATE TABLE #toto (v1 int, v2 int, v3 char(4), status char(6))
INSERT #toto (v1, v2, v3, status) EXEC dbo.sp_fulubulu(sp_param1)
SELECT * FROM #toto
DROP TABLE #toto
13
edomaur

In SQL Server 2005/2008, um die Zeilennummern in einem SELECT-Abfrageergebnis anzuzeigen:

SELECT ( ROW_NUMBER() OVER (ORDER BY OrderId) ) AS RowNumber,
        GrandTotal, CustomerId, PurchaseDate
FROM Orders

ORDER BY ist eine Pflichtklausel. Die OVER () -Klausel weist die SQL Engine an, Daten in der angegebenen Spalte (in diesem Fall OrderId) zu sortieren und Nummern gemäß den Sortierergebnissen zuzuweisen.

12
Binoj Antony

Nützlich zum Parsen von Argumenten für gespeicherte Prozeduren: xp_sscanf

Liest Daten aus der Zeichenfolge in die von jedem Formatargument angegebenen Argumentpositionen.

Im folgenden Beispiel wird xp_sscanf verwendet, um zwei Werte aus einer Quellzeichenfolge basierend auf ihrer Position im Format der Quellzeichenfolge zu extrahieren.

DECLARE @filename varchar (20), @message varchar (20)
EXEC xp_sscanf 'sync -b -fproducts10.tmp -rrandom', 'sync -b -f%s -r%s', 
  @filename OUTPUT, @message OUTPUT
SELECT @filename, @message

Hier ist die Ergebnismenge.

-------------------- -------------------- 
products10.tmp        random
10
Sklivvz

dm_db_index_usage_stats

Auf diese Weise können Sie feststellen, ob Daten in einer Tabelle kürzlich aktualisiert wurden, auch wenn die Tabelle keine DateUpdated-Spalte enthält.

SELECT OBJECT_NAME(OBJECT_ID) AS DatabaseName, last_user_update,*
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID( 'MyDatabase')
AND OBJECT_ID=OBJECT_ID('MyTable')

Code von: http://blog.sqlauthority.com/2009/05/09/sql-server-find-last-date-time-updated-for-any-table/

Informationen, auf die verwiesen wird von: SQL Server - Wie lautet das Datum/die Uhrzeit der zuletzt eingefügten Zeile einer Tabelle?

Verfügbar in SQL 2005 und höher

9
Nathan Koop

Nur Rückgabedatum

Select Cast(Floor(Cast(Getdate() As Float))As Datetime)

oder

Select DateAdd(Day, 0, DateDiff(Day, 0, Getdate()))
9
GateKiller

Suchen Sie nach Datensätzen, deren Datum in die aktuelle Woche fällt.

where dateadd( week, datediff( week, 0, TransDate ), 0 ) =
dateadd( week, datediff( week, 0, getdate() ), 0 )

Finden Sie Datensätze, deren Datum letzte Woche aufgetreten ist.

where dateadd( week, datediff( week, 0, TransDate ), 0 ) =
dateadd( week, datediff( week, 0, getdate() ) - 1, 0 )

Gibt das Datum für den Beginn der aktuellen Woche zurück.

select dateadd( week, datediff( week, 0, getdate() ), 0 )

Gibt das Datum für den Anfang der letzten Woche zurück.

select dateadd( week, datediff( week, 0, getdate() ) - 1, 0 )
7
GateKiller

Nicht so sehr eine versteckte Funktion, sondern das Einrichten von Tastenzuordnungen in Management Studio unter Tools\Options\Keyboard: Alt + F1 ist standardmäßig auf sp_help "Ausgewählter Text" eingestellt, aber ich kann nicht ohne das Hinzufügen von Strg + F1 für sp_helptext "Ausgewählter Text" leben

7
JohnD

Es gibt Zeiten, in denen es keine geeignete Spalte zum Sortieren gibt, oder Sie möchten nur die Standardsortierreihenfolge für eine Tabelle und jede Zeile aufzählen. Um dies zu tun, können Sie "(select 1)" in die "order by" -Klausel einfügen und Sie erhalten, was Sie wollen. Ordentlich, was?

select row_number() over (order by (select 1)), * from dbo.Table as t
7
Denis Valeev

Beständig berechnete Spalten

  • Mit berechneten Spalten können Sie die Kosten für die Laufzeitberechnung in die Datenänderungsphase verschieben. Die berechnete Spalte wird mit dem Rest der Zeile gespeichert und wird transparent verwendet, wenn der Ausdruck in den berechneten Spalten und der Abfrage übereinstimmt. Sie können auch Indizes auf den PCCs erstellen, um Filtrationen und Bereichsscans für den Ausdruck zu beschleunigen.

Link

7
Sklivvz

Ich finde die folgenden Funktionen nützlich, aber viele Leute scheinen nichts zu wissen:

sp_tables

Gibt eine Liste von Objekten zurück, die in der aktuellen Umgebung abgefragt werden können. Dies bedeutet jedes Objekt, das in einer FROM-Klausel erscheinen kann, mit Ausnahme von Synonymobjekten.

Link

sp_stored_procedures

Gibt eine Liste der gespeicherten Prozeduren in der aktuellen Umgebung zurück.

Link

7
Sklivvz

/ * Finden Sie das feste Laufwerk mit dem größten freien Speicherplatz, Sie können auch Dateien kopieren, um zu schätzen, welche Festplatte am schnellsten ist * /

EXEC master..xp_fixeddrives

/ * Überprüfen von Annahmen zu einer Datei vor der Verwendung oder Referenz * /

EXEC master..xp_fileexist 'C:\file_you_want_to_check'

Mehr Details hier

6
ICW

Einfache Verschlüsselung mit EncryptByKey

6
John Sheehan

Hier ist eine einfache, aber nützliche:

Wenn Sie Tabelleninhalte manuell bearbeiten, können Sie NULL in eine Spalte einfügen durch Eingabe von Strg-.

6
Ryan Lundy

Das Überraschendste, was ich diese Woche erfahren habe, war die Verwendung einer CASE-Anweisung in der ORDER By-Klausel. Beispielsweise:

declare @orderby varchar(10)

set @orderby = 'NAME'

select * 
    from Users
    ORDER BY 
        CASE @orderby
            WHEN 'NAME' THEN LastName
            WHEN 'EMAIL' THEN EmailAddress
        END
6
NotMe

SQLCMD

Wenn Sie Skripte haben, die Sie immer wieder ausführen, aber geringfügige Details ändern müssen, ist es fantastisch, ssms in sqlcmd-Modus auszuführen. Die sqlcmd Kommandozeile ist auch ziemlich schick.

Meine Lieblingsfunktionen sind:

  • Sie müssen Variablen setzen. Richtige Variablen, bei denen nicht durch sp_exec-Rahmen gesprungen werden muss
  • Sie können mehrere Skripte nacheinander ausführen
  • Diese Skripte können auf die Variablen im "äußeren" Skript verweisen

Anstatt mehr zu strömen, hat Simpletalk von Red Gate eine großartige Zusammenfassung von sqlcmd - The SQLCMD Workbench erstellt. Donabel Santos hat auch einige großartige SQLCMD-Beispiele .

6
Dan F

Hier ist eine Abfrage, die ich geschrieben habe, um alle DB-Benutzerobjekte nach dem letzten Änderungsdatum aufzulisten:

select name, modify_date, 
case when type_desc = 'USER_TABLE' then 'Table'
when type_desc = 'SQL_STORED_PROCEDURE' then 'Stored Procedure'
when type_desc in ('SQL_INLINE_TABLE_VALUED_FUNCTION', 'SQL_SCALAR_FUNCTION', 'SQL_TABLE_VALUED_FUNCTION') then 'Function'
end as type_desc
from sys.objects
where type in ('U', 'P', 'FN', 'IF', 'TF')
and is_ms_shipped = 0
order by 2 desc
5
Gordon Bell

benutze GETDATE() mit + oder -, um ein Datum in der Nähe zu berechnen

SELECT GETDATE() - 1 -- yesterday, 1 day ago, 24 hours ago
SELECT GETDATE() - .5 -- 12 hours ago
SELECT GETDATE() - .25 -- 6 hours ago
SELECT GETDATE() - (1 / 24.0) -- 1 hour ago (implicit decimal result after division)
4
MikeM

Trace Flags ! "1204" war für das Deadlock-Debugging auf SQL Server 2000 von unschätzbarem Wert (2005 bietet hierfür bessere Tools).

4
Constantin

Find Procedures By Keyword

Welche Prozeduren enthalten einen bestimmten Textabschnitt (Tabellenname, Spaltenname, Variablenname, TODO usw.)?

SELECT OBJECT_NAME(ID) FROM SysComments 
WHERE Text LIKE '%SearchString%' 
AND OBJECTPROPERTY(id, 'IsProcedure') = 1
4
Meff

Ich finde dieses kleine Skript sehr praktisch, um den Text einer Prozedur anzuzeigen, die auf einem Server implementiert wurde:

DECLARE @procedureName NVARCHAR( MAX ), @procedureText NVARCHAR( MAX )

SET @procedureName = 'myproc_Proc1'

SET @procedureText =    (
                            SELECT  OBJECT_DEFINITION( object_id )
                            FROM    sys.procedures 
                            WHERE   Name = @procedureName
                        )

PRINT @procedureText
4
cheeves

Ok, hier sind die wenigen, die ich noch habe, schade, dass ich den Start verpasst habe, aber weiter so, hier gibt es ein paar Top-Sachen!

Query Analyzer

  • Alt+F1 Führt sp_help Für den ausgewählten Text aus
  • Alt-D - Konzentrieren Sie sich auf das Datenbank-Dropdown-Menü, damit Sie mit den Cursortasten des Buchstabens db auswählen können.

T-Sql

  • if (object_id("nameofobject") IS NOT NULL) begin <do something> end - einfachste Existenzprüfung
  • sp_locks - ausführlichere Informationen zum Sperren als sp_who2 (die erste Anlaufstelle)
  • dbcc inputbuffer(spid) - Liste der obersten Zeile des ausgeführten Prozesses (irgendwie nützlich, aber v. kurz)
  • dbcc outputbuffer(spid) - Liste der obersten Ausgabezeile des ausgeführten Prozesses

Allgemeiner T-SQL-Tipp

  • Verwenden Sie bei großen Volumina Unterabfragen großzügig, um Daten in Gruppen zu verarbeiten

z.B. Um eine Liste von über fünfzig verheirateten Personen zu erhalten, können Sie eine Gruppe von Personen auswählen, die in einer Unterabfrage verheiratet sind, sich mit einer Gruppe von über fünfzig verheirateten Personen zusammenschließen und die zusammengeführten Ergebnisse ausgeben - bitte entschuldigen Sie das erfundene Beispiel

4
penderi

Chargenseparator

Die meisten Leute wissen es nicht, aber "GO" ist kein SQL-Befehl. Dies ist das von den Client-Tools verwendete Standard-Stapeltrennzeichen. Weitere Informationen dazu finden Sie in Books Online .

Sie können das Stapeltrennzeichen ändern, indem Sie in Management Studio Extras -> Optionen und im Abschnitt Abfrageausführung die Option Stapeltrennzeichen ändern.

Ich bin mir nicht sicher, warum Sie dies anders als als einen Streich tun möchten, aber es ist ein etwas interessantes Stück Trivia.

4
Rob Boek
sp_executesql 

Zum Ausführen einer Anweisung in einem String. So gut wie Ausführen, kann aber Parameter zurückgeben

4
Eduardo Molteni

sp_who2, genau wie sp_who, aber mit viel mehr Informationen zur Fehlerbehebung bei Blöcken

4
Booji Boy

In SQL Server Management Studio (SSMS) können Sie einen Objektnamen im Objekt-Explorer markieren und Strg-C drücken, um den Namen in die Zwischenablage zu kopieren.

Es ist nicht erforderlich, F2 zu drücken oder mit der rechten Maustaste zu klicken und das Objekt umzubenennen, um den Namen zu kopieren.

Sie können ein Objekt auch per Drag & Drop aus dem Objekt-Explorer in Ihr Abfragefenster ziehen.

3
Rob Boek

SQL 2000+ DBCC DROPCLEANBUFFERS: Löscht die Puffer. Nützlich zum Testen der Geschwindigkeit von Abfragen, wenn der Puffer sauber ist.

2
Brian

Stored proc sp_MSdependencies informiert Sie nützlicher über Objektabhängigkeiten als sp_depends. In einigen Produktionsversionen ist es praktisch, untergeordnete Tabelleneinschränkungen vorübergehend zu deaktivieren, Änderungen anzuwenden und dann die untergeordneten Tabelleneinschränkungen wieder zu aktivieren. Dies ist eine großartige Möglichkeit, Objekte zu finden, die von Ihrer übergeordneten Tabelle abhängen.

Dieser Code deaktiviert untergeordnete Tabelleneinschränkungen:

create table #deps
( oType int,
  oObjName sysname,
  oOwner nvarchar(200),
  oSequence int
)

insert into #deps  
exec sp_MSdependencies @tableName, null, 1315327

exec sp_MSforeachtable @command1 = 'ALTER TABLE ? NOCHECK CONSTRAINT ALL',
@whereand = ' and o.name in (select oObjName from #deps where oType = 8)'

Nachdem die Änderung angewendet wurde, kann dieser Code ausgeführt werden, um die Einschränkungen wieder zu aktivieren:

exec sp_MSforeachtable @command1 = 'ALTER TABLE ? WITH CHECK CHECK CONSTRAINT ALL',
@whereand = ' and o.name in (select oObjName from #deps where oType = 8)'

Der dritte Parameter heißt @flags und steuert, welche Arten von Abhängigkeiten aufgelistet werden. Lesen Sie den Proc-Inhalt, um zu sehen, wie Sie @flags für Ihre Zwecke ändern können. Der Proc verwendet Bitmasken, um zu entschlüsseln, was Sie zurückgeben möchten.

2
Sir Wobin

Da ich ein Programmierer und kein DBA bin, ist meine versteckte Lieblingsfunktion SMO-Bibliothek . Sie können in SQL Server so gut wie alles automatisieren, von der Erstellung und Löschung von Datenbanken, Tabellen und Spalten über das Erstellen von Skripten bis hin zum Sichern und Wiederherstellen. Wenn Sie dies in SQL Server Management Studio tun können, können Sie dies in SMO automatisieren.

2
Ryan Lundy

Hier ist eine, die ich heute gelernt habe, weil ich nach einer Transaktion suchen musste.

:: fn_dblog
Auf diese Weise können Sie das Transaktionsprotokoll für eine Datenbank abfragen.

USE mydatabase;
SELECT *
FROM ::fn_dblog(NULL, NULL)

http://killspid.blogspot.com/2006/07/using-fndblog.html

2
Chris Roland

Mein Favorit ist master..xp_cmdshell. Hiermit können Sie Befehle über eine Eingabeaufforderung auf dem Server ausführen und die Ausgabe anzeigen. Es ist äußerst nützlich, wenn Sie sich nicht am Server anmelden können, aber Informationen abrufen oder diese irgendwie steuern müssen.

Zum Beispiel, um die Ordner auf dem Laufwerk C: des Servers aufzulisten, auf dem SQL Server ausgeführt wird.

  • master..xp_cmdshell 'dir c: \'

Sie können auch Dienste starten und stoppen.

  • master..xp_cmdshell 'sc query "My Service"'

  • master..xp_cmdshell 'sc stop "My Service"'

  • master..xp_cmdshell 'sc starte "My Service"'

Es ist sehr mächtig, aber auch ein Sicherheitsrisiko. Viele Leute deaktivieren es, weil es leicht verwendet werden kann, um schlechte Dinge auf dem Server zu tun. Wenn Sie jedoch Zugriff darauf haben, kann dies äußerst nützlich sein.

2
Jim

Trigger für Anmeldeereignisse

  • Anmeldetrigger können die Überwachung und die Einhaltung ergänzen. Beispielsweise können Anmeldeereignisse verwendet werden, um Regeln für Verbindungen durchzusetzen (z. B. die Verbindung über einen bestimmten Benutzernamen oder die Verbindung über einen Benutzernamen auf einen bestimmten Zeitraum zu beschränken) oder einfach um allgemeine Verbindungsaktivitäten zu verfolgen und aufzuzeichnen. Wie bei jedem Trigger bricht ROLLBACK die gerade ausgeführte Operation ab. Im Falle eines Anmeldeereignisses bedeutet dies, dass der Verbindungsaufbau abgebrochen wird. Anmeldeereignisse werden nicht ausgelöst, wenn der Server im minimalen Konfigurationsmodus gestartet wird oder wenn eine Verbindung über eine dedizierte Administratorverbindung (DAC) hergestellt wird.

Link

2
Sklivvz

Basierend auf einer scheinbar vehementen Reaktion von erfahrenen Datenbankentwicklern würde die CLR-Integration hier ganz oben rangieren. =)

2
casperOne

Führen Sie einen gespeicherten Prozess aus und erfassen Sie die Ergebnisse in einer (temporären) Tabelle zur weiteren Verarbeitung, z.

INSERT INTO someTable EXEC sp_someproc

Beispiel: Zeigt sp_help Ausgabe, aber sortiert nach Datenbankgröße:

CREATE TABLE #dbs
(
    name nvarchar(50),
    db_size nvarchar(50),
    owner nvarchar(50),
    dbid int,
    created datetime,
    status nvarchar(255),
    compatiblity_level int
)
INSERT INTO #dbs EXEC sp_helpdb

SELECT * FROM #dbs 
ORDER BY CONVERT(decimal, LTRIM(LEFT(db_size, LEN(db_size)-3))) DESC

DROP TABLE #dbs
1
Duncan Smart

Die Funktion "Filter für Tabellen/gespeicherte Prozeduren" ist eine halb verborgene Funktion und kann sehr nützlich sein ...

Klicken Sie im SQL Server Management Studio Objekt-Explorer mit der rechten Maustaste auf Tabellen oder Gespeicherte Prozeduren Ordner, wählen Sie das Menü Filter, dann Filtereinstellungen und geben Sie einen Teilnamen in das Feld Name enthält Zeile.

Verwenden Sie ebenfalls Filter entfernen, um alle Tabellen/gespeicherten Prozeduren erneut anzuzeigen.

1
Gordon Bell

Rufen Sie eine Liste der Spaltenüberschriften im vertikalen Format ab:

Kopieren Sie die Spaltennamen in die Rasterergebnisse

Extras - Optionen - Abfrageergebnisse - SQL Server - Ergebnisse in Tabelle ankreuzen "Spaltenüberschriften beim Kopieren oder Speichern der Ergebnisse einbeziehen"

sie müssen zu diesem Zeitpunkt eine neue Verbindung herstellen und dann Ihre Abfrage ausführen

Wenn Sie nun die Ergebnisse aus dem Raster kopieren, erhalten Sie die Spaltenüberschriften

Auch wenn Sie dann die Ergebnisse nach Excel kopieren

Nur Spaltenüberschriften kopieren

Inhalte einfügen (Kopierbereich darf nicht überlappen)

kreuzen Sie "Transponieren" an

Okay

[Möglicherweise möchten Sie ein "," hinzufügen und an dieser Stelle automatisch ausfüllen]

Sie haben eine sofortige Liste von Spalten im vertikalen Format

1
adolf garlic

Dies sind einige versteckte Funktionen von SQL Management Studio, die mir gefallen.

Ich mag es sehr, wenn Sie beim Hervorheben von Informationen die ALT-Taste gedrückt halten und nicht nur ganze Zeilen, sondern auch Spalteninformationen auswählen.

In SQL Management Studio haben Sie vordefinierte Tastaturkürzel:

Strg + 1 führt sp_who aus. Strg + 2 führt sp_lock aus. Alt + F1 führt sp_help aus. Strg + F1 führt sp_helptext aus

Wenn Sie also einen Tabellennamen im Editor markieren und Alt + F1 drücken, wird die Struktur der Tabelle angezeigt.

1
Jose Chama

Verwenden des Dienstprogramms osql zum Ausführen von Befehlszeilenabfragen/Skripten/Batches

1
Kane

Wenn Sie alle Prozeduren in einer DB löschen möchten -

SELECT  IDENTITY ( int, 1, 1 ) id, 
        [name] 
INTO    #tmp 
FROM    sys.procedures 
WHERE   [type]        = 'P' 
    AND is_ms_shipped = 0 

DECLARE @i INT 

SELECT   @i = COUNT( id ) FROM #tmp 
WHILE    @i > 0 
BEGIN 
   DECLARE @name VARCHAR( 100 ) 
   SELECT @name = name FROM #tmp WHERE id = @i 
   EXEC ( 'DROP PROCEDURE ' + @name ) 
   SET @i = @i-1 
END

DROP TABLE #tmp
1
cheeves

haben Sie jemals versehentlich auf die Schaltfläche Ausführen geklickt, als Sie eigentlich auf Folgendes klicken wollten:
Debuggen/Analysieren/Datenbank verwenden/Zwischen Abfrageregistern wechseln/usw.?

So verschieben Sie diesen Knopf an einen sicheren Ort:

Extras -> Anpassen. und ziehen Sie die Schaltfläche, wo Sie möchten

Du kannst auch :
- Hinzufügen/Entfernen anderer häufig verwendeter/nicht verwendeter Schaltflächen (gilt auch für Befehle in MenuBar wie Datei/Bearbeiten)
- Ändere das Symbolbild der Schaltfläche (siehe das kleine Schwein unter Change Button Image .. lol)

1
waeva

DEFAULT_SCHEMA-Einstellung in sys.database_principles

  • SQL Server bietet große Flexibilität bei der Namensauflösung. Die Namensauflösung ist jedoch mit Kosten verbunden und kann bei Ad-hoc-Workloads, bei denen Objektreferenzen nicht vollständig qualifiziert werden, spürbar teuer werden. SQL Server 2005 ermöglicht eine neue Einstellung von DEFEAULT_SCHEMA für jedes Datenbankprinzip (auch als "Benutzer" bezeichnet), wodurch dieser Overhead beseitigt werden kann, ohne den TSQL-Code zu ändern.

Link

1
Sklivvz

Vardecimal Storage Format

  • SQL Server 2005 fügt ein neues Speicherformat für numerische und dezimale Datentypen hinzu, das als vardecimal bezeichnet wird. Vardecimal ist eine Darstellung variabler Länge für Dezimaltypen, mit der nicht verwendete Bytes in jeder Instanz der Zeile gespeichert werden können. Die größten Einsparungen ergeben sich aus Fällen, in denen die Dezimaldefinition groß ist (z. B. dezimal (38,6)), die gespeicherten Werte jedoch klein sind (z. B. ein Wert von 0,0) oder eine große Anzahl wiederholter Werte vorliegt oder Daten nur spärlich ausgefüllt sind .

Link

1
Sklivvz

Skalierbare gemeinsam genutzte Datenbanken

  • Über skalierbare gemeinsam genutzte Datenbanken können dieselben physischen Laufwerke auf Standardcomputern bereitgestellt und mehreren Instanzen von SQL Server 2005 ermöglicht werden, mit demselben Satz von Datendateien zu arbeiten. Das Setup erfordert keinen doppelten Speicher für jede Instanz von SQL Server und ermöglicht zusätzliche Verarbeitungsleistung durch mehrere SQL Server-Instanzen, die über eigene lokale Ressourcen wie CPU, Speicher, Tempdb und möglicherweise andere lokale Datenbanken verfügen.

Link

1
Sklivvz

Ich würde gerne ein kostenloses Add-In empfehlen SSMS Tools Pack , das eine Reihe von Funktionen hat, wie z

Code Ausschnitte

Sie müssen SELECT * FROM nicht mehr alleine eingeben. Geben Sie einfach SSF ein und drücken Sie die Eingabetaste (kann an jeden anderen Schlüssel angepasst werden. Ich bevorzuge Tab). Nur wenige andere nützliche Schnipsel sind

Registerkarte SSC + - SELECT COUNT (*) FROM

Registerkarte SST + - TOP 10 AUSWÄHLEN * VON

S + Tab - AUSWÄHLEN

I + Tab - EINFÜGEN

U + tab - UPDATE

W + Tab - WO

OB + Tab - ORDER BY

und die Liste geht weiter. Sie können die gesamte Liste mithilfe des SSMS Tools Pack-Menüs überprüfen und anpassen

Ausführungsprotokollverlauf

Haben Sie jemals realisiert, dass Sie eine Ad-hoc-Abfrage, die Sie vor einigen Tagen geschrieben haben, hätte speichern können, damit Sie das Rad nicht erneut erfinden müssen? Das SSMS Tools Pack speichert Ihren gesamten Ausführungsverlauf und Sie können anhand des Datums oder eines beliebigen Textes in der Abfrage suchen.

Datenbankdaten durchsuchen

Diese Funktion hilft Ihnen bei der Suche nach dem Vorkommen der Zeichenfolge in der gesamten Datenbank und zeigt den Tabellennamen und den Spaltennamen mit der Gesamtanzahl der Vorkommen an. Sie können diese Funktion verwenden, indem Sie im Objekt-Explorer mit der rechten Maustaste auf die Datenbank klicken und Datenbankdaten durchsuchen auswählen.

SQL formatieren

Setzt alle Schlüsselwörter auf Groß- oder Kleinbuchstaben. Klicken Sie mit der rechten Maustaste auf das Abfragefenster und wählen Sie Text formatieren. Sie können die Tastenkombination im SSMS-Menü Extras festlegen. Es fehlt jedoch die Ausrichtungsfunktion.

CRUD SP Generation

Klicken Sie mit der rechten Maustaste auf eine Tabelle, SSMS-Tools -> CRUD erstellen, um Einfügen, Aktualisieren, Löschen und SP auswählen zu generieren. Der Inhalt von SP kann über das Menü SSMS Tools angepasst werden.

Sonstiges

Einige andere Funktionen sind

  1. Suchergebnisse im Grid-Modus.
  2. Generieren Sie ein Einfügeskript aus Ergebnismenge, Tabellen und Datenbank.
  3. Ausführungsplan-Analyzer.
  4. Führen Sie ein Skript in mehreren Datenbanken aus.

Weitere Informationen finden Sie auf der Seite Features

1
Sundeep Arun

Ich benutze, um diese gespeicherte Prozedur der Master-Datenbank hinzuzufügen,

Verbesserungen:

  • Trimmen Sie den Hostnamen, damit das Kopieren und Einfügen in VNC funktioniert.
  • Es wurde eine LOCK-Option hinzugefügt, um nur zu sehen, welche Prozesse derzeit gesperrt sind.

Verwendung:

  • EXEC sp_who3 'ACTIVE'
  • EXEC sp_who3 'LOCK'
  • EXEC sp_who3 spid_No

Das ist es.

CREATE procedure sp_who3
       @loginame sysname = NULL --or 'active' or 'lock'
as

declare  @spidlow   int,
         @spidhigh  int,
         @spid      int,
         @sid       varbinary(85)

select   @spidlow   =     0
        ,@spidhigh  = 32767


if @loginame is not NULL begin
    if upper(@loginame) = 'ACTIVE' begin
        select spid, ecid, status
            , loginame=rtrim(loginame)
            , hostname=rtrim(hostname)
            , blk=convert(char(5),blocked)
            , dbname = case
                            when dbid = 0 then null
                            when dbid <> 0 then db_name(dbid)
                        end
              ,cmd
        from  master.dbo.sysprocesses
        where spid >= @spidlow and spid <= @spidhigh AND
              upper(cmd) <> 'AWAITING COMMAND'
        return (0)
    end
    if upper(@loginame) = 'LOCK' begin
        select spid , ecid, status
            , loginame=rtrim(loginame)
            , hostname=rtrim(hostname)
            , blk=convert(char(5),blocked)
            , dbname = case
                            when dbid = 0 then null
                            when dbid <> 0 then db_name(dbid)
                        end
              ,cmd
        from  master.dbo.sysprocesses
        where spid >= 0 and spid <= 32767 AND
              upper(cmd) <> 'AWAITING COMMAND'
        AND convert(char(5),blocked) > 0
        return (0)
    end

end

if (@loginame is not NULL
   AND  upper(@loginame) <> 'ACTIVE'
   )
begin
    if (@loginame like '[0-9]%')    -- is a spid.
    begin
        select @spid = convert(int, @loginame)
        select spid, ecid, status
            , loginame=rtrim(loginame)
            , hostname=rtrim(hostname)
            , blk=convert(char(5),blocked)
            , dbname = case
                            when dbid = 0 then null
                            when dbid <> 0 then db_name(dbid)
                        end
              ,cmd
        from  master.dbo.sysprocesses
        where spid = @spid
    end
    else
    begin
        select @sid = suser_sid(@loginame)
        if (@sid is null)
        begin
            raiserror(15007,-1,-1,@loginame)
            return (1)
        end
        select spid, ecid, status
            , loginame=rtrim(loginame)
            , hostname=rtrim(hostname)
            , blk=convert(char(5),blocked)
            , dbname = case
                            when dbid = 0 then null
                            when dbid <> 0 then db_name(dbid)
                        end
               ,cmd
        from  master.dbo.sysprocesses
        where sid = @sid
    end
    return (0)
end


/* loginame arg is null */
select spid,
       ecid,
       status
       , loginame=rtrim(loginame)
       , hostname=rtrim(hostname)
       , blk=convert(char(5),blocked)
       , dbname = case
                    when dbid = 0 then null
                    when dbid <> 0 then db_name(dbid)
                end
       ,cmd
from  master.dbo.sysprocesses
where spid >= @spidlow and spid <= @spidhigh


return (0) -- sp_who

BCP_IN und BCP_OUT sind perfekt für den BULK-Datenimport und -export

0
sourabh

master..spt_values (und speziell type = 'p') war sehr nützlich für Zeichenkettenaufteilung und das 'Binning' und Zeitinterpolation Manipulieren .

0
StuartLC

sp_lock: zeigt alle aktuellen Sperren an. Die zurückgegebenen Daten können weiter abgefragt werden als:

spid - Benutze es mit sp_who, um zu sehen, wem das Schloss gehört.

objid - Verwenden Sie es mit select object_name(objid), um zu sehen, welches Datenbankobjekt gesperrt ist.

0
viniciushana

Ein paar meiner Lieblingssachen:

Hinzugefügt in SP2 - Scripting-Optionen unter Tools/Optionen/Scripting

Neue Sicherheit mithilfe von Schemas - Erstellen Sie zwei Schemas: user_access und admin_access. Setzen Sie Ihre Benutzer-Procs in einen und Ihre Administrator-Procs in den anderen wie folgt ein: user_access.showList, admin_access.deleteUser. Gewähren Sie EXECUTE für das Schema Ihrem App-Benutzer/Ihrer App-Rolle. Nicht mehr die ganze Zeit GRANTING EXECUTE.

Verschlüsselung mit integrierten Verschlüsselungsfunktionen, Ansichten (zum Entschlüsseln für Präsentationen) und Basistabellen mit Triggern (zum Verschlüsseln beim Einfügen/Aktualisieren).

0
Sam

OK, hier sind meine 2 Cent:

http://dbalink.wordpress.com/2008/10/24/query-the-object-catalog-and-information-schema-views/

Ich bin zu faul, um die ganze Sache hier neu zu schreiben, also schau bitte in meinem Beitrag nach. Das mag für viele trivial sein, aber es wird einige geben, die es als "verstecktes Juwel" ansehen.

BEARBEITEN:

Nach einer Weile habe ich beschlossen, den Code hier hinzuzufügen, damit Sie nicht zu meinem Blog springen müssen, um den Code zu sehen.

SELECT  T.NAME AS [TABLE NAME], C.NAME AS [COLUMN NAME], P.NAME AS [DATA TYPE], P.MAX_LENGTH AS[SIZE],   CAST(P.PRECISION AS VARCHAR) +‘/’+ CAST(P.SCALE AS VARCHAR) AS [PRECISION/SCALE]
FROM ADVENTUREWORKS.SYS.OBJECTS AS T
JOIN ADVENTUREWORKS.SYS.COLUMNS AS C
ON T.OBJECT_ID=C.OBJECT_ID
JOIN ADVENTUREWORKS.SYS.TYPES AS P
ON C.SYSTEM_TYPE_ID=P.SYSTEM_TYPE_ID
WHERE T.TYPE_DESC=‘USER_TABLE’;

Oder, wenn Sie alle Benutzertabellen zusammen ziehen möchten, verwenden Sie CURSOR wie folgt:

DECLARE @tablename VARCHAR(60)

DECLARE cursor_tablenames CURSOR FOR
SELECT name FROM AdventureWorks.sys.tables

OPEN cursor_tablenames
FETCH NEXT FROM cursor_tablenames INTO @tablename

WHILE @@FETCH_STATUS = 0
BEGIN

SELECT  t.name AS [TABLE Name], c.name AS [COLUMN Name], p.name AS [DATA Type], p.max_length AS[SIZE],   CAST(p.PRECISION AS VARCHAR) +‘/’+ CAST(p.scale AS VARCHAR) AS [PRECISION/Scale]
FROM AdventureWorks.sys.objects AS t
JOIN AdventureWorks.sys.columns AS c
ON t.OBJECT_ID=c.OBJECT_ID
JOIN AdventureWorks.sys.types AS p
ON c.system_type_id=p.system_type_id
WHERE t.name = @tablename
AND t.type_desc=‘USER_TABLE’
ORDER BY t.name ASC

FETCH NEXT FROM cursor_tablenames INTO @tablename
END

CLOSE cursor_tablenames
DEALLOCATE cursor_tablenames

WEITERE HINWEISE (mein Blog): http://dbalink.wordpress.com/2009/01/21/how-to-create-cursor-in-tsql/

0
MarlonRibunal
use db
go 

select o.name 
, (SELECT [definition] AS [text()] 
     FROM sys.all_sql_modules 
     WHERE sys.all_sql_modules.object_id=a.object_id 
     FOR XML PATH(''), TYPE
  )  AS Statement_Text
 , a.object_id
 , o.modify_date 

 FROM sys.all_sql_modules a 
 LEFT JOIN  sys.objects o ON a.object_id=o.object_id 
 ORDER BY  4 desc

--select * from sys.objects
0
Yordan Georgiev

Ergebnisse basierend auf einer durch Pipe getrennten ID-Zeichenfolge in einer einzelnen Anweisung zurückgeben (alternativ zur Übergabe von XML oder erstem Umwandeln der durch Pipe getrennten Zeichenfolge in eine Tabelle)

Beispiel:

DECLARE @nvcIDs nvarchar(max)
SET @nvcIDs = '|1|2|3|'

SELECT C.*
FROM tblCompany C
WHERE @nvcIDs LIKE '%|' + CAST(C.CompanyID as nvarchar) + '|%' 
0
Sheki

STRG-E führt den aktuell ausgewählten Text in Query Analyzer aus.

0
Chris McCall

Tastenkombinationen für SQL Server Management Studio ... ermöglichen schnellere und schnellere Ergebnisse bei der täglichen Arbeit. http://sqlserver-qa.net/blogs/tools/archive/2007/04/25/management-studio-shortcut-keys.aspx

0
Satya SKJ

Sie können eine durch Kommas getrennte Liste mit einer Unterabfrage erstellen, ohne das letzte nachgestellte Komma. Dies soll effizienter sein als die Funktionen, die verwendet wurden, bevor dies verfügbar wurde. Ich denke 2005 und später.

SELECT 
    Project.ProjectName,
    (SELECT
        SUBSTRING(
            (SELECT ', ' + Site.SiteName
            FROM Site
            WHERE Site.ProjectKey = Project.ProjectKey
            ORDER BY Project.ProjectName
    FOR XML PATH('')),2,200000)) AS CSV 
FROM Project

Sie können auch FOR XML PATH mit verschachtelten Abfragen verwenden, um XML auszuwählen, was ich als nützlich erachtet habe.

0
Steve

Alternative zu Koltens sp_change_users_login:

ALTER USER wacom_app WITH LOGIN = wacom_app
0
Michhes
0
SQLMenace

Für SQL Server 2005:

select * from sys.dm_os_performance_counters

select * from sys.dm_exec_requests
0

Erzwungene Parametrierung

  • Durch die Parametrisierung kann SQL Server die Wiederverwendung von Abfrageplänen nutzen und den Aufwand für Kompilierung und Optimierung bei der nachfolgenden Ausführung ähnlicher Abfragen vermeiden. Es gibt jedoch viele Anwendungen, die aus dem einen oder anderen Grund immer noch unter dem Overhead der Ad-hoc-Abfragekompilierung leiden. In Fällen, in denen eine hohe Anzahl von Abfragen kompiliert wird und die Reduzierung der CPU-Auslastung und der Antwortzeit für Ihre Arbeitslast von entscheidender Bedeutung ist, kann die Force-Parametrisierung hilfreich sein.

Link

0
Sklivvz

Verwenden

wählen Sie * aus information_schema

um alle datenbanken, basistabellen, sps, ansichten usw. in sql server aufzulisten.

0
Ramesh
use db
go      
DECLARE @procName varchar(100)      
DECLARE @cursorProcNames CURSOR      
SET @cursorProcNames = CURSOR FOR      
select name from sys.procedures where modify_date > '2009-02-05 13:12:15.273' order by modify_date desc     

OPEN @cursorProcNames      
FETCH NEXT      
FROM @cursorProcNames INTO @procName      
WHILE @@FETCH_STATUS = 0      
BEGIN      
-- see the text of the last stored procedures modified on 
-- the db , hint Ctrl + T would give you the procedures test 
set nocount off;      
exec sp_HelpText @procName --- or print them      
-- print @procName      

FETCH NEXT      
FROM @cursorProcNames INTO @procName      
END      
CLOSE @cursorProcNames      

select @@error  
0
Yordan Georgiev

Nicht undokumentiert

RowNumber mit freundlicher Genehmigung von Itzik Ben-Gan http://www.sqlmag.com/article/articleid/97675/sql_server_blog_97675.html

SET XACT_ABORT ON Rollback aller fehlerhaften Transaktionen

alle sp_s sind hilfreich, blättern Sie einfach online Bücher

tastenkombinationen, die ich im Management Studio immer verwende F6 - zwischen Ergebnissen wechseln und abfragen Alt + X oder F5 - ausgewählten Text in Abfrage ausführen, wenn nichts ausgewählt ist, wird das gesamte Fenster ausgeführt Alt + T und Alt + D - führt zu Text bzw. Raster

0
user31269

Ich verwende SSMS, um Text in Dateien auf der Festplatte des Betriebssystems zu finden. Es macht es super einfach, Regex zu schreiben und durch jedes Verzeichnis zu sichten, um Text zu ersetzen oder zu finden. Ich fand das immer einfacher als mit Windows.

0

In SQL Server 2005 muss die gespeicherte Prozedur sp-blocker-pss8 nicht mehr ausgeführt werden. Stattdessen können Sie Folgendes tun:

exec sp_configure 'show advanced options', 1;
reconfigure;
go
exec sp_configure 'blocked process threshold', 30;
reconfigure; 

Anschließend können Sie eine SQL-Ablaufverfolgung starten und in der Gruppe Fehler und Warnungen die Ereignisklasse Blockierter Prozessbericht auswählen. Details zu diesem Ereignis hier .

0
Logicalmind

@Gatekiller - Ein einfacher Weg, um nur das Datum zu bekommen, ist sicherlich

CAST(CONVERT(varchar,getdate(),103) as datetime)

Wenn Sie in Ihrem Gebietsschema nicht TT/MM/JJJJ verwenden, müssen Sie einen anderen Wert als 103 verwenden.

0
Ollie

Ich finde sp_depends sinnvoll. Es zeigt die Objekte an, die von einem gegebenen Objekt abhängen, z.

exec sp_depends 'fn_myFunction' 

gibt Objekte zurück, die von dieser Funktion abhängen (Hinweis: Wenn die Objekte ursprünglich nicht in der richtigen Reihenfolge in der Datenbank ausgeführt wurden, führt dies zu falschen Ergebnissen.)

0
Dave ODonnell