Udostępnij za pośrednictwem


sys.fn_get_sql (Transact-SQL)

Dotyczy:SQL Server

Zwraca tekst instrukcji SQL dla określonego uchwytu SQL.

Ważne

Ta funkcja zostanie usunięta w przyszłej wersji programu Microsoft SQL Server. Unikaj używania tej funkcji w nowych pracach programistycznych i zaplanuj modyfikowanie aplikacji, które obecnie korzystają z tej funkcji. Zamiast tego użyj sys.dm_exec_sql_text. Aby uzyskać więcej informacji, zobacz sys.dm_exec_sql_text (Transact-SQL).

Transact-SQL konwencje składni

Składnia

  
sys.fn_get_sql ( SqlHandle )  

Argumenty (w programowaniu)

SqlHandle
Czy wartość uchwytu. SqlHandle jest varbinary(64) bez wartości domyślnej.

Zwrócone tabele

Nazwa kolumny Typ danych Opis
dbid smallint Identyfikator bazy danych. W przypadku instrukcji ad hoc i przygotowanych sql identyfikator bazy danych, w której skompilowano instrukcje.
identyfikator obiektu Int Identyfikator obiektu bazy danych. Jest wartością NULL dla instrukcji SQL ad hoc.
Liczba smallint Wskazuje liczbę grup, jeśli procedury są pogrupowane.

0 = Wpisy nie są procedurami.

NULL = instrukcje SQL ad hoc.
Szyfrowane bit Wskazuje, czy obiekt jest zaszyfrowany.

0 = Niezaszyfrowane

1 = Zaszyfrowane
Tekst tekst To tekst instrukcji SQL. Ma wartość NULL dla zaszyfrowanych obiektów.

Uwagi

Prawidłowy uchwyt SQL można uzyskać z kolumny sql_handle dynamicznego widoku zarządzania sys.dm_exec_requests (Transact-SQL).

Jeśli przekażesz uchwyt, który już nie istnieje w pamięci podręcznej, fn_get_sql zwróci pusty zestaw wyników. Jeśli przekażesz uchwyt, który jest nieprawidłowy, partia zostanie zatrzymana i zostanie zwrócony komunikat o błędzie.

Aparat bazy danych programu SQL Server nie może buforowania niektórych instrukcji Transact-SQL, takich jak instrukcje kopiowania zbiorczego i instrukcje z literałami ciągu, które są większe niż 8 KB. Nie można pobrać dojść do tych instrukcji przy użyciu fn_get_sql.

Kolumna tekstowa zestawu wyników jest filtrowana pod kątem tekstu, który może zawierać hasła. Aby uzyskać więcej informacji na temat procedur składowanych związanych z zabezpieczeniami, które nie są monitorowane, zobacz Filtrowanie śledzenia.

Funkcja fn_get_sql zwraca informacje podobne do polecenia DBCC INPUTBUFFER . Poniżej przedstawiono przykłady użycia funkcji fn_get_sql, ponieważ nie można użyć funkcji DBCC INPUTBUFFER:

  • Gdy zdarzenia mają więcej niż 255 znaków.

  • Gdy trzeba zwrócić najwyższy bieżący poziom zagnieżdżania procedury składowanej. Istnieją na przykład dwie procedury składowane o nazwie sp_1 i sp_2. Jeśli sp_1 wywołuje sp_2 i uzyskujesz dojście z dynamicznego widoku zarządzania sys.dm_exec_requests podczas działania sp_2, funkcja fn_get_sql zwraca informacje o sp_2. Ponadto funkcja fn_get_sql zwraca pełny tekst procedury składowanej na najwyższym bieżącym poziomie zagnieżdżania.

Uprawnienia

Użytkownik musi mieć uprawnienia WYŚWIETL STAN SERWERA na serwerze.

Przykłady

Administratorzy baz danych mogą używać funkcji fn_get_sql, jak pokazano w poniższym przykładzie, aby ułatwić diagnozowanie procesów problemów. Po zidentyfikowaniu identyfikatora sesji problemu administrator może pobrać dojście SQL dla tej sesji, wywołać fn_get_sql z dojściem, a następnie użyć przesunięcia początkowego i końcowego, aby określić tekst SQL identyfikatora sesji problemu.

DECLARE @Handle varbinary(64);  
SELECT @Handle = sql_handle   
FROM sys.dm_exec_requests   
WHERE session_id = 52 and request_id = 0;  
SELECT * FROM sys.fn_get_sql(@Handle);  
GO  

Zobacz też

DBCC INPUTBUFFER (Transact-SQL)
sys.sysprocesses (Transact-SQL)
sys.dm_exec_requests (Transact-SQL)