Aracılığıyla paylaş


sp_describe_first_result_set (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnalytics Platform Sistemi (PDW)Microsoft FabricWarehouse'da SQL analiz uç noktası

Transact-SQL toplu işleminin ilk olası sonuç kümesinin meta verilerini döndürür. Toplu işlem sonuç döndürmezse boş bir sonuç kümesi döndürür. Veritabanı Altyapısı statik bir analiz gerçekleştirerek yürütülecek ilk sorgunun meta verilerini belirleyemezse hataya neden olur. Dinamik yönetim görünümü sys.dm_exec_describe_first_result_set aynı bilgileri döndürür.

Transact-SQL söz dizimi kuralları

Sözdizimi

sp_describe_first_result_set [ @tsql = ] N'tsql'
    [ , [ @params = ] N'@parameter_name data_type [ , ... n ]' ]
    [ , [ @browse_information_mode = ] <tinyint> ]
[ ; ]

Bağımsız değişken

Önemli

Genişletilmiş saklı yordamlar için bağımsız değişkenler, Sözdizimi bölümünde açıklandığı gibi belirli bir sırada girilmelidir. Parametreler sıra dışı girilirse bir hata iletisi oluşur.

[ @tsql = ] 'tsql'

Bir veya daha fazla Transact-SQL deyimi. @tsqlnvarchar(n) veya nvarchar(max)olabilir.

[ @params = ] N'@parameter_namedata_type [ , ... n ]'

@params, Transact-SQL toplu işleminin parametreleri için sp_executesqlbenzer bir bildirim dizesi sağlar. Parametreler nvarchar(n) veya nvarchar(max) olabilir.

@tsqleklenmiş tüm parametrelerin tanımlarını içeren bir dize. Dize bir Unicode sabiti veya Unicode değişkeni olmalıdır. Her parametre tanımı bir parametre adından ve bir veri türünden oluşur. n, ek parametre tanımlarını gösteren bir yer tutucudur. deyiminde belirtilen her parametre @paramsiçinde tanımlanmalıdır. deyimindeki Transact-SQL deyimi veya toplu işlemi parametre içermiyorsa @params gerekli değildir. NULL bu parametre için varsayılan değerdir.

[ @browse_information_mode = ] tinyint

Ek anahtar sütunlarının ve kaynak tablo bilgilerinin döndürülip döndürülmediğini belirtir. 1olarak ayarlanırsa, her sorgu, sorguda bir FOR BROWSE seçeneği içeriyor gibi analiz edilir.

  • 0olarak ayarlanırsa hiçbir bilgi döndürülür.

  • 1olarak ayarlanırsa, her sorgu, sorguda bir FOR BROWSE seçeneği içeriyor gibi analiz edilir. Bu, temel tablo adlarını kaynak sütun bilgileri olarak döndürür.

  • 2olarak ayarlanırsa, her sorgu bir imleç hazırlanırken veya yürütülürken kullanılır gibi analiz edilir. Bu, görünüm adlarını kaynak sütun bilgileri olarak döndürür.

Dönüş kodu değerleri

sp_describe_first_result_set her zaman başarı durumunda sıfır durumunu döndürür. Yordam bir hata oluşturursa ve yordam RPC olarak çağrılırsa, dönüş durumu sys.dm_exec_describe_first_result_seterror_type sütununda açıklanan hata türüyle doldurulur. Yordam Transact-SQL'den çağrılırsa, hata olduğunda bile dönüş değeri her zaman sıfır olur.

Sonuç kümesi

Bu ortak meta veriler, sonuç meta verilerindeki her sütun için bir satır içeren bir sonuç kümesi olarak döndürülür. Her satır, sütunun türünü ve null atanabilirliğini aşağıdaki bölümde açıklanan biçimde açıklar. Her denetim yolu için ilk deyim yoksa, sıfır satır içeren bir sonuç kümesi döndürülür.

Sütun adı Veri tipi Açıklama
is_hidden bit Sütunun, göz atma bilgileri için eklenen ek bir sütun olduğunu ve sonuç kümesinde aslında görünmediğini gösterir. Boş değer atanamaz.
column_ordinal Int Sonuç kümesindeki sütunun sıralı konumunu içerir. İlk sütunun konumu 1olarak belirtilir. Boş değer atanamaz.
name sysname Bir ad belirlenebiliyorsa sütunun adını içerir. Aksi takdirde, NULLiçerir. Nullable.
is_nullable bit sütun 1izin veriyorsa NULL değerini 0 sütun NULLizin vermiyorsa 1NULLizin veriyorsa 1. Boş değer atanamaz.
system_type_id Int system_type_id'de belirtildiği gibi sütunun veri türünün sys.types içerir. CLR türleri için, system_type_name sütunu NULLdöndürse de, bu sütun 240değerini döndürür. Boş değer atanamaz.
system_type_name nvarchar(256) Sütunun veri türü için belirtilen adı ve bağımsız değişkenleri (uzunluk, duyarlık, ölçek gibi) içerir. Veri türü kullanıcı tanımlı bir diğer ad türüyse, temel alınan sistem türü burada belirtilir. ClR kullanıcı tanımlı bir türse, bu sütunda NULL döndürülür. Nullable.
max_length smallint Sütunun uzunluk üst sınırı (bayt cinsinden).

-1 = Sütun veri türü varchar(max), nvarchar(max), varbinary(max)veya xml.

metin sütunlarda, max_length değeri 16 veya sp_tableoption 'text in row'tarafından ayarlanan değerdir. Boş değer atanamaz.
precision tinyint Sayısal tabanlıysa sütunun duyarlığı. Aksi takdirde 0döndürür. Boş değer atanamaz.
scale tinyint Sayısal tabanlıysa sütunun ölçeği. Aksi takdirde 0döndürür. Boş değer atanamaz.
collation_name sysname Karakter tabanlıysa sütunun harmanlamasının adı. Aksi takdirde NULLdöndürür. Nullable.
user_type_id Int CLR ve diğer ad türleri için, user_type_id'de belirtildiği gibi sütunun veri türünün sys.types içerir. Aksi takdirde NULL. Nullable.
user_type_database sysname CLR ve diğer ad türleri için, türün tanımlandığı veritabanının adını içerir. Aksi takdirde NULL. Nullable.
user_type_schema sysname CLR ve diğer ad türleri için, türün tanımlandığı şemanın adını içerir. Aksi takdirde NULL. Nullable.
user_type_name sysname CLR ve diğer ad türleri için türün adını içerir. Aksi takdirde NULL. Nullable.
assembly_qualified_type_name nvarchar(4000) CLR türleri için, türü tanımlayan derlemenin ve sınıfın adını döndürür. Aksi takdirde NULL. Nullable.
xml_collection_id Int xml_collection_id'de belirtildiği gibi sütunun veri türünün sys.columns içerir. Döndürülen tür bir XML şema koleksiyonuyla ilişkili değilse bu sütun NULL döndürür. Nullable.
xml_collection_database sysname Bu türle ilişkili XML şema koleksiyonunun tanımlandığı veritabanını içerir. Döndürülen tür bir XML şema koleksiyonuyla ilişkili değilse bu sütun NULL döndürür. Nullable.
xml_collection_schema sysname Bu türle ilişkili XML şema koleksiyonunun tanımlandığı şemayı içerir. Döndürülen tür bir XML şema koleksiyonuyla ilişkili değilse bu sütun NULL döndürür. Nullable.
xml_collection_name sysname Bu türle ilişkili XML şema koleksiyonunun adını içerir. Döndürülen tür bir XML şema koleksiyonuyla ilişkili değilse bu sütun NULL döndürür. Nullable.
is_xml_document bit Döndürülen veri türü XML ise 1 döndürür ve bu türün XML parçasının aksine tam bir XML belgesi (kök düğüm dahil) olması garanti edilir. Aksi takdirde 0döndürür. Boş değer atanamaz.
is_case_sensitive bit Sütun büyük/küçük harfe duyarlı bir dize türündeyse 1 ve değilse 0 döndürür. Boş değer atanamaz.
is_fixed_length_clr_type bit Sütun sabit uzunlukta bir CLR türündeyse 1 ve değilse 0 döndürür. Boş değer atanamaz.
source_server sysname Bu sonuçtaki sütun tarafından döndürülen kaynak sunucunun adı (uzak sunucudan geliyorsa). Ad, sys.serversiçinde göründüğü şekilde verilir. Sütunun kaynağı yerel sunucudaysa veya hangi sunucudan kaynaklandığı belirlenemiyorsa NULL döndürür. Yalnızca gözatma bilgileri isteniyorsa doldurulur. Nullable.
source_database sysname Bu sonuçtaki sütun tarafından döndürülen kaynak veritabanının adı. Veritabanı belirlenemiyorsa NULL döndürür. Yalnızca gözatma bilgileri isteniyorsa doldurulur. Nullable.
source_schema sysname Bu sonuçtaki sütun tarafından döndürülen kaynak şemanın adı. Şema belirlenemiyorsa NULL döndürür. Yalnızca gözatma bilgileri isteniyorsa doldurulur. Nullable.
source_table sysname Bu sonuçtaki sütun tarafından döndürülen kaynak tablonun adı. Tablo belirlenemiyorsa NULL döndürür. Yalnızca gözatma bilgileri isteniyorsa doldurulur. Nullable.
source_column sysname Sonuç sütunu tarafından döndürülen kaynak sütunun adı. Sütun belirlenemiyorsa NULL döndürür. Yalnızca gözatma bilgileri isteniyorsa doldurulur. Nullable.
is_identity_column bit Sütun bir kimlik sütunuysa 1 ve değilse 0 döndürür. Sütunun bir kimlik sütunu olduğu belirlenemezse NULL döndürür. Nullable.
is_part_of_unique_key bit Sütun benzersiz bir dizinin parçasıysa (benzersiz ve birincil kısıtlama dahil) 1 ve değilse 0 döndürür. Sütunun benzersiz bir dizinin parçası olduğu belirlenemezse NULL döndürür. Yalnızca gözatma bilgileri isteniyorsa doldurulur. Nullable.
is_updateable bit Sütunun güncelleştirilebilir olup olmadığını 1 ve güncelleştirilmediyse 0 döndürür. Sütunun güncelleştirilebilir olduğu belirlenemezse NULL döndürür. Nullable.
is_computed_column bit Sütun hesaplanan bir sütunsa 1 ve değilse 0 döndürür. Sütunun hesaplanan sütun olduğu belirlenemezse NULL döndürür. Nullable.
is_sparse_column_set bit Sütun seyrek bir sütunsa 1 ve değilse 0 döndürür. Sütunun seyrek sütun kümesinin parçası olduğu belirlenemezse NULL döndürür. Nullable.
ordinal_in_order_by_list smallint Bu sütunun ORDER BY listesindeki konumu. Sütun NULL listesinde görünmüyorsa veya ORDER BY listesi benzersiz olarak belirlenemiyorsa ORDER BY döndürür. Nullable.
order_by_list_length smallint ORDER BY listesinin uzunluğu. NULL liste yoksa veya ORDER BY listesi benzersiz olarak belirlenemiyorsa ORDER BY döndürür. Bu değer, sp_describe_first_result_settarafından döndürülen tüm satırlar için aynıdır. Nullable.
order_by_is_descending smallint ordinal_in_order_by_list NULLdeğilse, order_by_is_descending sütunu bu sütun için ORDER BY yan tümcesinin yönünü bildirir. Aksi takdirde NULLbildirir. Nullable.
tds_type_id Int dahili kullanım için. Boş değer atanamaz.
tds_length Int dahili kullanım için. Boş değer atanamaz.
tds_collation_id Int dahili kullanım için. Nullable.
tds_collation_sort_id tinyint dahili kullanım için. Nullable.

Açıklamalar

sp_describe_first_result_set, yordam ilk sonuç kümesi meta verilerini (varsayımsal) A toplu işlemi için döndürürse ve bu toplu iş (A) yürütülürse toplu işlemin aşağıdakilerden birini garanti eder:

  • bir iyileştirme zamanı hatası oluşturur
  • çalışma zamanı hatasına neden olur
  • sonuç kümesi döndürmez
  • sp_describe_first_result_set tarafından açıklanan meta verileri içeren ilk sonuç kümesini döndürür

Ad, null atanabilirlik ve veri türü farklı olabilir. sp_describe_first_result_set boş bir sonuç kümesi döndürürse, toplu yürütmenin sonuç kümeleri döndürmediği garanti edilir.

Bu garanti, sunucuda ilgili şema değişiklikleri olmadığı varsayılır. Sunucudaki ilgili şema değişiklikleri, A toplu işleminde sp_describe_first_result_set çağrılır ve sonuç kümesinin yürütme sırasında döndürüldiği süre (B toplu işlemi tarafından yapılan şema değişiklikleri dahil) arasında geçici tablolar veya tablo değişkenleri oluşturmayı içermez.

sp_describe_first_result_set aşağıdaki durumlardan herhangi birinde hata döndürür:

  • Giriş @tsql geçerli bir Transact-SQL toplu işlemi değildir. Geçerlilik, Transact-SQL toplu işlemini ayrıştırarak ve analiz ederek belirlenir. Sorgu iyileştirme sırasında veya yürütme sırasında toplu işlemden kaynaklanan hatalar, Transact-SQL toplu işleminin geçerli olup olmadığı belirlenirken dikkate alınmaz.

  • @paramsNULL değildir ve parametreler için söz dizimsel olarak geçerli olmayan bir bildirim dizesi veya herhangi bir parametreyi birden çok kez bildiren bir dize içeriyorsa bir dize içerir.

  • Giriş Transact-SQL toplu işlemi, @paramsiçinde bildirilen bir parametreyle aynı ada sahip bir yerel değişken bildirir.

  • deyimi geçici bir tablo kullanır.

  • Sorgu, daha sonra sorgulanan kalıcı bir tablo oluşturmayı içerir.

Diğer tüm denetimler başarılı olursa, giriş toplu işleminin içindeki tüm olası denetim akışı yolları dikkate alınır. Bu, tüm denetim akışı deyimlerini (GOTO, IF/ELSE, WHILEve Transact-SQL TRY/CATCH blokları) ve tüm yordamları dikkate alır, dinamik Transact-SQL toplu işlemleri veya bir EXECUTE deyimi tarafından giriş toplu işleminden çağrılan tetikleyiciler, DDL tetikleyicilerinin tetiklenmesine neden olan bir DDL deyimi veya hedef tabloda veya bir tablo üzerinde basamaklı eylem nedeniyle değiştirilen bir tabloda tetikleyicilerin tetiklenmesine neden olan bir DML deyimi yabancı anahtar kısıtlaması. Bir noktada, birçok olası denetim yolunda olduğu gibi bir algoritma durdurulur.

Her denetim akışı yolu için, bir sonuç kümesi döndüren ilk deyim (varsa) sp_describe_first_result_settarafından belirlenir.

Bir toplu işlemde birden çok olası ilk deyim bulunduğunda, sonuçları sütun sayısı, sütun adı, null atanabilirlik ve veri türü bakımından farklılık gösterebilir. Bu farklılıkların nasıl ele alındığı burada daha ayrıntılı olarak açıklanmıştır:

  • Sütun sayısı farklıysa bir hata oluşur ve sonuç döndürülür.

  • Sütun adı farklıysa, döndürülen sütun adı NULLolarak ayarlanır.

  • Null atanabilirlik farklıysa, döndürülen null atanabilirlik NULLizin verir.

  • Veri türü farklıysa bir hata oluşur ve aşağıdaki durumlar dışında hiçbir sonuç döndürülür:

    • varchar(a)varchar(a') a' >.
    • varchar(a) varchar(max)
    • nvarchar(a)nvarchar(a') a' >.
    • nvarchar(a)nvarchar(max)
    • varbinary(a)varbinary(a') a' >.
    • varbinary(a) varbinary(max)

sp_describe_first_result_set dolaylı özyinelemesi desteklemez.

İzinler

@tsql bağımsız değişkenini yürütmek için izin gerektirir.

Örnekler

Tipik örnekler

A. Temel örnek

Aşağıdaki örnekte tek bir sorgudan döndürülen sonuç kümesi açıklanmaktadır.

EXECUTE sp_describe_first_result_set @tsql = N'SELECT object_id, name, type_desc FROM sys.indexes';

Aşağıdaki örnek, parametre içeren tek bir sorgudan döndürülen sonuç kümesini gösterir.

EXECUTE sp_describe_first_result_set @tsql = N'
SELECT object_id, name, type_desc
FROM sys.indexes
WHERE object_id = @id1', @params = N'@id1 int';

B. Gözatma modu örnekleri

Aşağıdaki üç örnek, farklı göz atma bilgileri modları arasındaki temel farkı göstermektedir. Sorgu sonuçlarına yalnızca ilgili sütunlar eklenir.

0kullanma örneği, hiçbir bilgi döndürülmedi.

CREATE TABLE dbo.t
(
    a INT PRIMARY KEY,
    b1 INT
);
GO

CREATE VIEW dbo.v AS
    SELECT b1 AS b2
    FROM dbo.t;
GO

EXECUTE sp_describe_first_result_set N'SELECT b2 AS b3 FROM dbo.v', NULL, 0;

Kısmi bir sonuç kümesi aşağıdadır.

gizli sütun_sırası ad source_schema source_table source_column is_part_of_unique_key
0 1 b3 NULL NULL NULL NULL

Sorguda FOR BROWSE seçeneği içeriyor gibi bilgi döndürdüğüne işaret eden 1 kullanan örnek.

EXECUTE sp_describe_first_result_set N'SELECT b2 AS b3 FROM v', NULL, 1;

Kısmi bir sonuç kümesi aşağıdadır.

gizli sütun_sırası ad source_schema source_table source_column is_part_of_unique_key
0 1 b3 Dbo t B1 0
1 2 a Dbo t a 1

İmleç hazırlar gibi analiz edilen 2 kullanan örnek.

EXECUTE sp_describe_first_result_set N'SELECT b2 AS b3 FROM v', NULL, 2;

Sonuç kümesi aşağıdadır.

gizli sütun_sırası ad source_schema source_table source_column is_part_of_unique_key
0 1 B3 Dbo v B2 0
1 2 ROWSTAT NULL NULL NULL 0

C. Sonuçları tabloda depolama

Bazı senaryolarda, şemayı daha fazla işleyebilmeniz için sp_describe_first_result_set yordamının sonuçlarını bir tabloya yerleştirmeniz gerekir.

İlk olarak sp_describe_first_result_set yordamının çıkışıyla eşleşen bir tablo oluşturmanız gerekir:

CREATE TABLE #frs
(
    is_hidden BIT NOT NULL,
    column_ordinal INT NOT NULL,
    name SYSNAME NULL,
    is_nullable BIT NOT NULL,
    system_type_id INT NOT NULL,
    system_type_name NVARCHAR (256) NULL,
    max_length SMALLINT NOT NULL,
    precision TINYINT NOT NULL,
    scale TINYINT NOT NULL,
    collation_name SYSNAME NULL,
    user_type_id INT NULL,
    user_type_database SYSNAME NULL,
    user_type_schema SYSNAME NULL,
    user_type_name SYSNAME NULL,
    assembly_qualified_type_name NVARCHAR (4000),
    xml_collection_id INT NULL,
    xml_collection_database SYSNAME NULL,
    xml_collection_schema SYSNAME NULL,
    xml_collection_name SYSNAME NULL,
    is_xml_document BIT NOT NULL,
    is_case_sensitive BIT NOT NULL,
    is_fixed_length_clr_type BIT NOT NULL,
    source_server SYSNAME NULL,
    source_database SYSNAME NULL,
    source_schema SYSNAME NULL,
    source_table SYSNAME NULL,
    source_column SYSNAME NULL,
    is_identity_column BIT NULL,
    is_part_of_unique_key BIT NULL,
    is_updateable BIT NULL,
    is_computed_column BIT NULL,
    is_sparse_column_set BIT NULL,
    ordinal_in_order_by_list SMALLINT NULL,
    order_by_list_length SMALLINT NULL,
    order_by_is_descending SMALLINT NULL,
    tds_type_id INT NOT NULL,
    tds_length INT NOT NULL,
    tds_collation_id INT NULL,
    tds_collation_sort_id TINYINT NULL
);

Tablo oluşturduğunuzda, bir sorgunun şemasını bu tabloda depolayabilirsiniz.

DECLARE @tsql AS NVARCHAR (MAX) = 'select top 0 * from sys.credentials';

INSERT INTO #frs
EXECUTE sys.sp_describe_first_result_set @tsql;

SELECT *
FROM #frs;

Sorun örnekleri

Aşağıdaki örneklerde tüm örnekler için iki tablo kullanılır. Örnek tabloları oluşturmak için aşağıdaki deyimleri yürütür.

CREATE TABLE dbo.t1
(
    a INT NULL,
    b VARCHAR (10) NULL,
    c NVARCHAR (10) NULL
);

CREATE TABLE dbo.t2
(
    a SMALLINT NOT NULL,
    d VARCHAR (20) NOT NULL,
    e INT NOT NULL
);

Sütun sayısı farklı olduğundan hata oluştu

Olası ilk sonuç kümelerindeki sütun sayısı bu örnekte farklılık gösterir.

EXECUTE sp_describe_first_result_set @tsql = N'
IF (1 = 1)
    SELECT a FROM t1;
ELSE
    SELECT a, b FROM t1;

SELECT * FROM t; -- Ignored, not a possible first result set.';

Veri türleri farklı olduğundan hata oluştu

Sütun türleri farklı olası ilk sonuç kümelerinde farklılık gösterir.

EXECUTE sp_describe_first_result_set @tsql = N'
IF (1 = 1)
    SELECT a FROM t1;
ELSE
    SELECT a FROM t2;';

Bu, uyuşmazlık türleriyle sonuçlanır (int ile smallint).

Sütun adı belirlenemiyor

Olası ilk sonuç kümelerindeki sütunlar, aynı değişken uzunluğu türü, null atanabilirlik ve sütun adları için uzunluğa göre farklılık gösterir:

EXECUTE sp_describe_first_result_set @tsql = N'
IF (1 = 1)
    SELECT b FROM t1;
ELSE
    SELECT d FROM t2;';

Kısmi bir sonuç kümesi aşağıdadır.

Sütun Değer
name Bilinmeyen sütun adı
system_type_name varchar
max_length 20
is_nullable 1

Diğer ad aracılığıyla sütun adı aynı olmaya zorlandı

Öncekiyle aynı, ancak sütun diğer adları aracılığıyla sütunların adı aynı olur.

EXECUTE sp_describe_first_result_set @tsql = N'
IF (1 = 1)
    SELECT b FROM t1;
ELSE
    SELECT d AS b FROM t2;';

Kısmi bir sonuç kümesi aşağıdadır.

Sütun Değer
name b
system_type_name varchar
max_length 20
is_nullable 1

Sütun türleri eşleştirilemediği için hata oluştu

Sütun türleri farklı olası ilk sonuç kümelerinde farklılık gösterir.

EXECUTE sp_describe_first_result_set @tsql = N'
IF (1 = 1)
    SELECT b FROM t1;
ELSE
    SELECT c FROM t1;';

Bu, eşleşmeyen türler (varchar(10) ve nvarchar(10)) hatasıyla sonuçlanır.

Sonuç kümesi hata döndürebilir

İlk sonuç kümesi hata veya sonuç kümesidir.

EXECUTE sp_describe_first_result_set @tsql = N'
IF (1 = 1)
    RAISERROR(''Some Error'', 16 , 1);
ELSE
    SELECT a FROM t1;
SELECT e FROM t2; -- Ignored, not a possible first result set.';

Kısmi bir sonuç kümesi aşağıdadır.

Sütun Değer
name a
system_type_name int
is_nullable 1

Bazı kod yolları sonuç döndürmez

İlk sonuç kümesi null veya sonuç kümesidir.

EXECUTE sp_describe_first_result_set @tsql = N'
IF (1 = 1)
    RETURN;
SELECT a FROM t1;';

Kısmi bir sonuç kümesi aşağıdadır.

Sütun Değer
name a
system_type_name int
is_nullable 1

Dinamik SQL sonucu

İlk sonuç kümesi, sabit bir dize olduğundan bulunabilen dinamik SQL'dir.

EXECUTE sp_describe_first_result_set @tsql = N'
EXECUTE(N''SELECT a FROM t1'');';

Kısmi bir sonuç kümesi aşağıdadır.

Sütun Değer
name a
system_type_name int
is_nullable 1

Dinamik SQL'den sonuç hatası

İlk sonuç kümesi, dinamik SQL nedeniyle tanımsız.

EXECUTE sp_describe_first_result_set @tsql = N'
DECLARE @SQL NVARCHAR(max);
SET @SQL = N''SELECT a FROM t1 WHERE 1 = 1'';
IF (1 = 1)
    SET @SQL += N'' AND e > 10'';
EXECUTE(@SQL);';

Bu bir hatayla sonuçlanır. Sonuç, dinamik SQL nedeniyle bulunamıyor.

Kullanıcı tarafından belirtilen sonuç kümesi

İlk sonuç kümesi kullanıcı tarafından el ile belirtilir.

EXECUTE sp_describe_first_result_set @tsql = N'
DECLARE @SQL NVARCHAR(max);
SET @SQL = N''SELECT a FROM t1 WHERE 1 = 1'';
IF (1 = 1)
    SET @SQL += N'' AND e > 10'';
EXECUTE(@SQL)
    WITH RESULT SETS (
        (Column1 BIGINT NOT NULL)
    );';

Kısmi bir sonuç kümesi aşağıdadır.

Sütun Değer
name Column1
system_type_name bigint
is_nullable 0

Belirsiz bir sonuç kümesinin neden olduğu hata

Bu örnekte, user1 adlı başka bir kullanıcının varsayılan şemada t1 adlı bir tablosu olduğu varsayılır s1 sütunlu (a int NOT NULL).

EXECUTE sp_describe_first_result_set @tsql = N'
    IF (@p > 0)
    EXECUTE AS USER = ''user1'';
    SELECT * FROM t1;', @params = N'@p int';

Bu kod bir Invalid object name hatasıyla sonuçlanır. t1 her biri farklı sayıda sütuna sahip dbo.t1 veya s1.t1olabilir.

Belirsiz sonuç kümesiyle bile sonuç

Önceki örnekle aynı varsayımları kullanın.

EXECUTE sp_describe_first_result_set @tsql = N'
    IF (@p > 0)
    EXECUTE AS USER = ''user1'';
    SELECT a FROM t1;';

Kısmi bir sonuç kümesi aşağıdadır.

Sütun Değer
name a
system_type_name int
is_nullable 1

Hem dbo.t1.a hem de s1.t1.a türü intve farklı null atanabilirliğe sahiptir.