Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да изберете подмножество от колони от набора от резултати на съхранена процедура (T-SQL)

Случвало ли ви се е да изпълнявате съхранена процедура, само за да бъдете претоварени от броя на върнатите колони? Може би сте имали нужда само от една или две колони, но това ви представи начин твърде много колони за вашите нужди по този конкретен повод.

За щастие има малък трик, който можете да използвате, за да извлечете избрани колони от съхранена процедура. Това ви позволява да получите точно необходимите колони.

И най-хубавото е, че не е необходимо да създавате временни таблици и да разбърквате данните наоколо.

Всичко, което трябва да направите, е да предадете вашата съхранена процедура на OPENROWSET() функция.

Същата концепция може да се приложи към OPENQUERY() функция.

Пример

Вземете sp_columns например системна съхранена процедура. Връща 19 колони.

EXEC sp_columns Cats; 

Резултат:

+------------------+--------------+---------- ----+--------------+------------+--------------+ -------------+-----------+--------+--------+----- -------+----------+--------------+-------------- --+-------------------+---------------------+---- ----------------+--------------+----------------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | COLUMN_NAME | DATA_TYPE | TYPE_NAME | ТОЧНОСТ | ДЪЛЖИНА | МАЩАБ | RADIX | НУЛИВА | ЗАБЕЛЕЖКИ | COLUMN_DEF | SQL_DATA_TYPE | SQL_DATETIME_SUB | CHAR_OCTET_LENGTH | ORDINAL_POSITION | IS_NULLABLE | SS_DATA_TYPE ||---------------------+--------------+----------- ---+--------------+------------+--------------+- ------------+----------+--------+--------+------ ------+-----------+--------------+---------------- -+--------------------+---------------------+----- ---------------+--------------+----------------|| Домашни любимци | dbo | Котки | CatId | 4 | int идентичност | 10 | 4 | 0 | 10 | 0 | NULL | NULL | 4 | NULL | NULL | 1 | НЕ | 56 || Домашни любимци | dbo | Котки | Име на котка | 12 | varchar | 60 | 60 | NULL | NULL | 1 | NULL | NULL | 12 | NULL | 60 | 2 | ДА | 39 |+-------------------+--------------+----------- ---+--------------+------------+--------------+- ------------+----------+--------+--------+------ ------+-----------+--------------+---------------- -+--------------------+---------------------+----- ---------------+--------------+----------------+ 

Процедури като тази често изискват от нас да превъртаме настрани в преследване на дива гъска, за да намерим колоните, които ни интересуват.

Може би просто искаме да видим 4 конкретни колони вместо всичките 19.

Можем да изпълним следната заявка, за да направим точно това.

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; 

Резултат:

+--------------+--------------+------------+- ---------+| COLUMN_NAME | TYPE_NAME | ТОЧНОСТ | ДЪЛЖИНА ||--------------+--------------+------------+-- --------|| CatId | int идентичност | 10 | 4 || Име на котка | varchar | 60 | 60 |+--------------+--------------+------------+-- --------+

OPENROWSET() функцията е проектирана главно за извличане на отдалечени данни, но можете да я използвате и в локалния екземпляр, като посочите localhost в низа за връзка (както направих в този пример).

Функцията OPENQUERY()

Както споменахме, същата концепция може да се приложи към OPENQUERY() функция.

SELECT 
    c.COLUMN_NAME,
    c.TYPE_NAME,
    c.PRECISION,
    c.LENGTH
FROM OPENQUERY(
    Homer,
    'EXEC Pets.dbo.sp_columns Cats'
    ) c; 

Резултат:

+--------------+--------------+------------+- ---------+| COLUMN_NAME | TYPE_NAME | ТОЧНОСТ | ДЪЛЖИНА ||--------------+--------------+------------+-- --------|| CatId | int идентичност | 10 | 4 || Име на котка | varchar | 60 | 60 |+--------------+--------------+------------+-- --------+

В този случай посочих свързан сървър, наречен Homer вместо локалния сървър.

Ако получите грешка, която гласи „Сървърът не е конфигуриран за ДОСТЪП ДО ДАННИ“, ще трябва да активирате достъпа до данни за сървъра, дори ако правите заявка за вашия локален екземпляр. Вижте Как да активирате/деактивирате достъпа до данни за инструкции как да направите това.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как бързо да редактирате стойности в таблицата в SQL Server Management Studio?

  2. Как да активирате RPC Out с помощта на T-SQL

  3. Регистър на транзакциите на SQL Server — част 1

  4. Увеличението на идентичността скача в базата данни на SQL Server

  5. Как да създадете ограничение на външния ключ с ON UPDATE CASCADE в SQL Server - SQL Server / TSQL Урок, част 79