sql >> Databáze >  >> RDS >> Sqlserver

Jak vybrat podmnožinu sloupců ze sady výsledků uložené procedury (T-SQL)

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ím localhost 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.


  1. Jak vypočítat tržby v MySQL

  2. Jak stáhnout Postgres bytea sloupec jako soubor

  3. Postgres celočíselná pole jako parametry?

  4. Vyhněte se těmto 4 běžným chybám DBA