Określ, czy parametr SP ma wartość domyślną w języku T-SQL
Czy jest jakiś sposób na określenie z poziomu SQL Server (jestem w 2012 FYI), czy parametry SP mają wartości domyślne? Tam sąinny wątki w tej sprawie jednak sugestie nie wydają mi się dokładnie informować.
Oto kilka rzeczy, które próbowałem;
select *
from sys.objects so join sys.parameters sp on so.object_id = sp.object_id
where so.type='P'
and so.name = 'someSp'
Powyższe zapytanie zwraca pewną liczbę kolumn, które brzmią tak, jakbym szczekał w prawym drzewie (has_default_value, default_value wśród nich)ale te nie wydają się różnić, czy mam wartość domyślną w SP, czy nie. (Wartość has_default ma zawsze wartość 0, wartość default_value ma zawsze wartość null)
exec sp_sproc_columns 'someSp'
Ta sama umowa; powyższy SP zwraca liczbę kolumn, w tym NULLABLE i IS_NULLABLE; NULLABLE jest zawsze równe 1 i IS_NULLABLE = YES, niezależnie od zawartości SP.
Notka; Studio zarządzania SQL Server wyraźnie wyświetla metadane związane z każdym parametrem SP.
Użyłem programu SQL Profiler do sprawdzenia, co się dzieje, gdy przeglądam parametry SP w Eksploratorze obiektów Management Studio. Po rozwinięciu folderu parametrów uruchamiane są dwa zapytania. Pierwsze zapytanie jest trochę za długie na wklejanie tutaj (chociaż zrobię to, jeśli będzie pomocne). Zawiera kolumnę o nazwie WARTOŚĆ DOMYŚLNA; jednak zawsze jest NULL, o ile wiem. Drugie zapytanie po prostu zwraca treść SP; przypuszczalnie do wyjścia do okna edytora tekstu (choć obawiam się, że w mgmt studio może się zdarzyć parsowanie!)
Dla odniesienia / aby upewnić się, że nie tracę swoich kul, stworzyłem dwa bezsensowne Sps tylko do testowania. Wyglądają na:
CREATE PROCEDURE TestDefaultSpValue_Default
@I INT = 2
AS
BEGIN
SET NOCOUNT ON;
SELECT @I
END
CREATE PROCEDURE TestDefaultSpValue_NoDefault
@I INT
AS
BEGIN
SET NOCOUNT ON;
SELECT @I
END