Spustili jste někdy uloženou proceduru a byli jste zahlceni počtem vrácených sloupců? Možná jste potřebovali jen jeden nebo dva sloupce, ale nabídlo vám to způsob příliš mnoho sloupců pro vaše potřeby při této konkrétní příležitosti.
Naštěstí existuje malý trik, který můžete použít k načtení vybraných sloupců z uložené procedury. To vám umožní získat pouze ty sloupce, které potřebujete.
A nejlepší na tom je, že to nevyžaduje vytváření dočasných tabulek a míchání dat.
Vše, co musíte udělat, je předat uloženou proceduru do OPENROWSET()
funkce.
Stejný koncept lze aplikovat na OPENQUERY()
funkce.
Příklad
Použijte sp_columns
například systémová uložená procedura. Vrátí 19 sloupců.
EXEC sp_columns Cats;
Výsledek:
+-------------------+---------------+----------- ----+---------------+-------------+--------------+ -------------+----------+---------+---------+----- -------+-----------+--------------+--------------- --+---------------------+----------------------+---- ----------------+--------------+----------------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | COLUMN_NAME | DATA_TYPE | TYPE_NAME | PŘESNOST | DÉLKA | MĚŘÍTKO | RADIX | NULOVATELNÉ | POZNÁMKY | COLUMN_DEF | SQL_DATA_TYPE | SQL_DATETIME_SUB | CHAR_OCTET_LENGTH | ORDINAL_POSITION | JE_NULLABLE | SS_DATA_TYPE ||-------------------+---------------+------------ ---+---------------+-------------+--------------+- ------------+----------+---------+---------+------ ------+-----------+--------------+---------------- -+--------------------+----------------------------- ---------------+---------------+----------------|| Domácí mazlíčci | dbo | Kočky | CatId | 4 | int identita | 10 | 4 | 0 | 10 | 0 | NULL | NULL | 4 | NULL | NULL | 1 | NE | 56 || Domácí mazlíčci | dbo | Kočky | Jméno kočky | 12 | varchar | 60 | 60 | NULL | NULL | 1 | NULL | NULL | 12 | NULL | 60 | 2 | ANO | 39 |+-------------------+---------------+------------ ---+---------------+-------------+--------------+- ------------+----------+---------+---------+------ ------+-----------+--------------+---------------- -+--------------------+----------------------------- ---------------+---------------+----------------+Procedury, jako je tento, často vyžadují, abychom se v divoké huse posouvali do stran, abychom našli sloupce, které nás zajímají.
Možná jen chceme vidět 4 konkrétní sloupce místo všech 19.
K tomu můžeme spustit následující dotaz.
SELECT c.COLUMN_NAME, c.TYPE_NAME, c.PRECISION, c.LENGTH FROM OPENROWSET( 'SQLOLEDB', 'SERVER=localhost;Trusted_Connection=yes;', 'EXEC Pets.dbo.sp_columns Cats' ) c;
Výsledek:
+---------------+--------------+-------------+- ---------+| COLUMN_NAME | TYPE_NAME | PŘESNOST | DÉLKA ||---------------+--------------+-------------+-- --------|| CatId | int identita | 10 | 4 || Jméno kočky | varchar | 60 | 60 |+---------------+--------------+-------------+-- --------+
OPENROWSET()
funkce byla navržena hlavně pro získávání vzdálených dat, ale můžete ji použít i na lokální instanci zadánímlocalhost
v připojovacím řetězci (jako jsem to udělal v tomto příkladu).Funkce OPENQUERY()
Jak bylo zmíněno, stejný koncept lze aplikovat na
OPENQUERY()
funkce.SELECT c.COLUMN_NAME, c.TYPE_NAME, c.PRECISION, c.LENGTH FROM OPENQUERY( Homer, 'EXEC Pets.dbo.sp_columns Cats' ) c;
Výsledek:
+---------------+--------------+-------------+- ---------+| COLUMN_NAME | TYPE_NAME | PŘESNOST | DÉLKA ||---------------+--------------+-------------+-- --------|| CatId | int identita | 10 | 4 || Jméno kočky | varchar | 60 | 60 |+---------------+--------------+-------------+-- --------+V tomto případě jsem zadal propojený server s názvem
Homer
místo lokálního serveru.Pokud se zobrazí chyba „Server není nakonfigurován pro PŘÍSTUP K DATŮM“, budete muset serveru povolit přístup k datům, a to i v případě, že se dotazujete na svou místní instanci. Pokyny, jak to provést, naleznete v části Jak povolit/zakázat přístup k datům.