Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर में परिणाम सेट की स्कीमा प्राप्त करने के 3 तरीके

कभी-कभी जब आप SQL सर्वर में कोई क्वेरी चलाते हैं, तो हो सकता है कि आप जानना चाहें कि प्रत्येक कॉलम का अंतर्निहित डेटा प्रकार क्या है, इसकी सटीकता, लंबाई, यह अशक्त है या नहीं, आदि।

यदि आप केवल एक तालिका की क्वेरी कर रहे हैं, तो आप sp_columns जैसी प्रक्रियाओं के साथ इस प्रकार का डेटा प्राप्त कर सकते हैं . लेकिन अगर आपकी क्वेरी कई तालिकाओं में चलती है, तो यह बहुत जल्दी बोझिल हो सकती है।

सौभाग्य से ऐसे कई तरीके हैं जिनसे आप SQL सर्वर में सेट किए गए परिणाम के लिए ऐसे मेटाडेटा प्राप्त कर सकते हैं।

sp_describe_first_result_set सिस्टम संग्रहित प्रक्रिया

sp_describe_first_result_set सिस्टम संग्रहीत प्रक्रिया विशेष रूप से परिणाम सेट के लिए मेटाडेटा वापस करने के लिए डिज़ाइन की गई थी।

यह तीन मापदंडों को स्वीकार करता है, लेकिन अंतिम दो वैकल्पिक हैं। पहला पैरामीटर T-SQL क्वेरी है जिसका आप विश्लेषण करना चाहते हैं।

कार्रवाई में इस प्रक्रिया का एक उदाहरण यहां दिया गया है।

DECLARE @tsql_query nvarchar(max);
SET @tsql_query = 'SELECT
    ar.ArtistName,
    al.AlbumName,
    g.Genre
FROM 
    Artists ar 
    INNER JOIN Albums al 
    ON ar.ArtistId = al.ArtistId 
    INNER JOIN Homer.Music.dbo.Genres g 
    ON al.GenreId = g.GenreId';

EXEC sp_describe_first_result_set @tsql_query, null, 1;

आप वास्तव में क्वेरी को एक स्ट्रिंग अक्षर के रूप में प्रदान कर सकते हैं, लेकिन इस मामले में मैंने इसे @tsql_query नामक एक चर में रखा है ।

परिणाम:

+-------------+------------------+------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+---------------+--------------+--------------------+-------------------------+
| is_hidden   | column_ordinal   | name       | is_nullable   | system_type_id   | system_type_name   | max_length   | precision   | scale   | collation_name               | user_type_id   | user_type_database   | user_type_schema   | user_type_name   | assembly_qualified_type_name   | xml_collection_id   | xml_collection_database   | xml_collection_schema   | xml_collection_name   | is_xml_document   | is_case_sensitive   | is_fixed_length_clr_type   | source_server   | source_database   | source_schema   | source_table   | source_column   | is_identity_column   | is_part_of_unique_key   | is_updateable   | is_computed_column   | is_sparse_column_set   | ordinal_in_order_by_list   | order_by_is_descending   | order_by_list_length   | tds_type_id   | tds_length   | tds_collation_id   | tds_collation_sort_id   |
|-------------+------------------+------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+---------------+--------------+--------------------+-------------------------|
| 0           | 1                | ArtistName | 0             | 231              | nvarchar(255)      | 510          | 0           | 0       | SQL_Latin1_General_CP1_CI_AS | NULL           | NULL                 | NULL               | NULL             | NULL                           | NULL                | NULL                      | NULL                    | NULL                  | 0                 | 0                   | 0                          | NULL            | Music             | dbo             | Artists        | ArtistName      | 0                    | 0                       | 1               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | 231           | 510          | 13632521           | 52                      |
| 0           | 2                | AlbumName  | 0             | 231              | nvarchar(255)      | 510          | 0           | 0       | SQL_Latin1_General_CP1_CI_AS | NULL           | NULL                 | NULL               | NULL             | NULL                           | NULL                | NULL                      | NULL                    | NULL                  | 0                 | 0                   | 0                          | NULL            | Music             | dbo             | Albums         | AlbumName       | 0                    | 0                       | 1               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | 231           | 510          | 13632521           | 52                      |
| 0           | 3                | Genre      | 0             | 231              | nvarchar(50)       | 100          | 0           | 0       | SQL_Latin1_General_CP1_CI_AS | NULL           | NULL                 | NULL               | NULL             | NULL                           | NULL                | NULL                      | NULL                    | NULL                  | 0                 | 0                   | 0                          | Homer           | Music             | dbo             | Genres         | Genre           | 0                    | 0                       | 1               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | 231           | 100          | 13632521           | 52                      |
| 1           | 4                | ArtistId   | 0             | 56               | int                | 4            | 10          | 0       | NULL                         | NULL           | NULL                 | NULL               | NULL             | NULL                           | NULL                | NULL                      | NULL                    | NULL                  | 0                 | 0                   | 0                          | NULL            | Music             | dbo             | Artists        | ArtistId        | 1                    | 1                       | 0               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | 56            | 4            | NULL               | NULL                    |
| 1           | 5                | AlbumId    | 0             | 56               | int                | 4            | 10          | 0       | NULL                         | NULL           | NULL                 | NULL               | NULL             | NULL                           | NULL                | NULL                      | NULL                    | NULL                  | 0                 | 0                   | 0                          | NULL            | Music             | dbo             | Albums         | AlbumId         | 1                    | 1                       | 0               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | 56            | 4            | NULL               | NULL                    |
| 1           | 6                | GenreId    | 0             | 56               | int                | 4            | 10          | 0       | NULL                         | NULL           | NULL                 | NULL               | NULL             | NULL                           | NULL                | NULL                      | NULL                    | NULL                  | 0                 | 0                   | 0                          | Homer           | Music             | dbo             | Genres         | GenreId         | 0                    | 1                       | 1               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | 56            | 4            | NULL               | NULL                    |
+-------------+------------------+------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+---------------+--------------+--------------------+-------------------------+

जैसा कि आप देख सकते हैं, यह संग्रहीत कार्यविधि बहुत सारे कॉलम लौटाती है।

यदि आप उस प्रश्न को ध्यान से देखते हैं जिसका मैं विश्लेषण कर रहा हूं, तो आप देखेंगे कि संदर्भित तालिकाओं में से एक "होमर" नामक एक लिंक किए गए सर्वर पर है। sp_describe_first_result_set . द्वारा उत्पादित परिणामों में , source_server . में मान कॉलम इस लिंक किए गए सर्वर को उस अंतर्निहित कॉलम के लिए दर्शाता है।

इस उदाहरण में, मैंने 1 . का उपयोग किया है तीसरे तर्क के रूप में। आप 0 . का भी उपयोग कर सकते हैं या 2 . देखें कैसे sp_describe_first_result_set यह सेटिंग परिणामों को कैसे प्रभावित करती है, इसकी व्याख्या और उदाहरणों के लिए काम करती है।

sys.dm_exec_describe_first_result_set सिस्टम दृश्य

sys.dm_exec_describe_first_result_set सिस्टम दृश्य sp_describe_first_result_set . के समान एल्गोरिथम का उपयोग करता है , और यह वही जानकारी देता है।

इसलिए हम sys.dm_exec_describe_first_result_set का उपयोग करने के लिए अपने पिछले उदाहरण को संशोधित कर सकते हैं sp_describe_first_result_set . के बजाय ।

DECLARE @tsql_query nvarchar(max);
SET @tsql_query = 'SELECT
    ar.ArtistName,
    al.AlbumName,
    g.Genre
FROM 
    Artists ar 
    INNER JOIN Albums al 
    ON ar.ArtistId = al.ArtistId 
    INNER JOIN Homer.Music.dbo.Genres g 
    ON al.GenreId = g.GenreId';
SELECT * 
FROM sys.dm_exec_describe_first_result_set(
    @tsql_query, 
    null, 
    1
    );

परिणाम:

+-------------+------------------+------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+----------------+------------------+---------------+-----------------+--------------+-------------------+
| is_hidden   | column_ordinal   | name       | is_nullable   | system_type_id   | system_type_name   | max_length   | precision   | scale   | collation_name               | user_type_id   | user_type_database   | user_type_schema   | user_type_name   | assembly_qualified_type_name   | xml_collection_id   | xml_collection_database   | xml_collection_schema   | xml_collection_name   | is_xml_document   | is_case_sensitive   | is_fixed_length_clr_type   | source_server   | source_database   | source_schema   | source_table   | source_column   | is_identity_column   | is_part_of_unique_key   | is_updateable   | is_computed_column   | is_sparse_column_set   | ordinal_in_order_by_list   | order_by_is_descending   | order_by_list_length   | error_number   | error_severity   | error_state   | error_message   | error_type   | error_type_desc   |
|-------------+------------------+------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+----------------+------------------+---------------+-----------------+--------------+-------------------|
| 0           | 1                | ArtistName | 0             | 231              | nvarchar(255)      | 510          | 0           | 0       | SQL_Latin1_General_CP1_CI_AS | NULL           | NULL                 | NULL               | NULL             | NULL                           | NULL                | NULL                      | NULL                    | NULL                  | 0                 | 0                   | 0                          | NULL            | Music             | dbo             | Artists        | ArtistName      | 0                    | 0                       | 1               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | NULL           | NULL             | NULL          | NULL            | NULL         | NULL              |
| 0           | 2                | AlbumName  | 0             | 231              | nvarchar(255)      | 510          | 0           | 0       | SQL_Latin1_General_CP1_CI_AS | NULL           | NULL                 | NULL               | NULL             | NULL                           | NULL                | NULL                      | NULL                    | NULL                  | 0                 | 0                   | 0                          | NULL            | Music             | dbo             | Albums         | AlbumName       | 0                    | 0                       | 1               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | NULL           | NULL             | NULL          | NULL            | NULL         | NULL              |
| 0           | 3                | Genre      | 0             | 231              | nvarchar(50)       | 100          | 0           | 0       | SQL_Latin1_General_CP1_CI_AS | NULL           | NULL                 | NULL               | NULL             | NULL                           | NULL                | NULL                      | NULL                    | NULL                  | 0                 | 0                   | 0                          | Homer           | Music             | dbo             | Genres         | Genre           | 0                    | 0                       | 1               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | NULL           | NULL             | NULL          | NULL            | NULL         | NULL              |
| 1           | 4                | ArtistId   | 0             | 56               | int                | 4            | 10          | 0       | NULL                         | NULL           | NULL                 | NULL               | NULL             | NULL                           | NULL                | NULL                      | NULL                    | NULL                  | 0                 | 0                   | 0                          | NULL            | Music             | dbo             | Artists        | ArtistId        | 1                    | 1                       | 0               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | NULL           | NULL             | NULL          | NULL            | NULL         | NULL              |
| 1           | 5                | AlbumId    | 0             | 56               | int                | 4            | 10          | 0       | NULL                         | NULL           | NULL                 | NULL               | NULL             | NULL                           | NULL                | NULL                      | NULL                    | NULL                  | 0                 | 0                   | 0                          | NULL            | Music             | dbo             | Albums         | AlbumId         | 1                    | 1                       | 0               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | NULL           | NULL             | NULL          | NULL            | NULL         | NULL              |
| 1           | 6                | GenreId    | 0             | 56               | int                | 4            | 10          | 0       | NULL                         | NULL           | NULL                 | NULL               | NULL             | NULL                           | NULL                | NULL                      | NULL                    | NULL                  | 0                 | 0                   | 0                          | Homer           | Music             | dbo             | Genres         | GenreId         | 0                    | 1                       | 1               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | NULL           | NULL             | NULL          | NULL            | NULL         | NULL              |
+-------------+------------------+------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+----------------+------------------+---------------+-----------------+--------------+-------------------+

जैसा कि sp_describe_first_result_set . के साथ है , आप दूसरे और तीसरे तर्कों को बदल सकते हैं। उदाहरण के लिए देखें कि sys.dm_exec_describe_first_result_set कैसे काम करता है।

OPENROWSET का उपयोग करना

यदि आप sys.dm_exec_describe_first_result_set के स्रोत कोड को देखते हैं , आप देखेंगे कि यह OPENROWSET . का उपयोग करता है इसके परिणाम प्राप्त करने के लिए।

इसी तरह, हम OPENROWSET . का उपयोग कर सकते हैं एक समान कार्य करने के लिए। उदाहरण के लिए, हम OPENROWSET . का उपयोग कर सकते हैं किसी क्वेरी के शीर्ष शून्य परिणामों को अस्थायी तालिका में चलाने के लिए, फिर sp_columns का उपयोग करें उस अस्थायी तालिका के बारे में कॉलम जानकारी वापस करने की प्रक्रिया (जो हमारी क्वेरी के परिणाम सेट को दर्शाती है)।

SELECT TOP 0 * INTO #TempTable 
FROM OPENROWSET(
    'SQLNCLI', 
    'Server=localhost;Trusted_Connection=yes;', 
    'SELECT
    ar.ArtistName,
    al.AlbumName,
    g.Genre
FROM 
    Music.dbo.Artists ar 
    INNER JOIN Music.dbo.Albums al 
    ON ar.ArtistId = al.ArtistId 
    INNER JOIN Music.dbo.Genres g 
    ON al.GenreId = g.GenreId');
EXEC('USE tempdb EXEC sp_columns #TempTable DROP TABLE #TempTable');

परिणाम:

+-------------------+---------------+----------------------------------------------------------------------------------------------------------------------------------+---------------+-------------+-------------+-------------+----------+---------+---------+------------+-----------+--------------+-----------------+--------------------+---------------------+--------------------+---------------+----------------+
| TABLE_QUALIFIER   | TABLE_OWNER   | TABLE_NAME                                                                                                                       | COLUMN_NAME   | DATA_TYPE   | TYPE_NAME   | PRECISION   | LENGTH   | SCALE   | RADIX   | NULLABLE   | REMARKS   | COLUMN_DEF   | SQL_DATA_TYPE   | SQL_DATETIME_SUB   | CHAR_OCTET_LENGTH   | ORDINAL_POSITION   | IS_NULLABLE   | SS_DATA_TYPE   |
|-------------------+---------------+----------------------------------------------------------------------------------------------------------------------------------+---------------+-------------+-------------+-------------+----------+---------+---------+------------+-----------+--------------+-----------------+--------------------+---------------------+--------------------+---------------+----------------|
| tempdb            | dbo           | #TempTable__________________________________________________________________________________________________________00000000000C | ArtistName    | -9          | nvarchar    | 255         | 510      | NULL    | NULL    | 0          | NULL      | NULL         | -9              | NULL               | 510                 | 1                  | NO            | 39             |
| tempdb            | dbo           | #TempTable__________________________________________________________________________________________________________00000000000C | AlbumName     | -9          | nvarchar    | 255         | 510      | NULL    | NULL    | 0          | NULL      | NULL         | -9              | NULL               | 510                 | 2                  | NO            | 39             |
| tempdb            | dbo           | #TempTable__________________________________________________________________________________________________________00000000000C | Genre         | -9          | nvarchar    | 50          | 100      | NULL    | NULL    | 0          | NULL      | NULL         | -9              | NULL               | 100                 | 3                  | NO            | 39             |
+-------------------+---------------+----------------------------------------------------------------------------------------------------------------------------------+---------------+-------------+-------------+-------------+----------+---------+---------+------------+-----------+--------------+-----------------+--------------------+---------------------+--------------------+---------------+----------------+

आप sp_columns replace को बदल सकते हैं sp_help . के साथ अगर पसंद किया जाता है।

मुझे लगता है कि पहले दो तरीके बेहतर हैं, लेकिन कम से कम यह एक और विकल्प है (विशेषकर यदि आप SQL सर्वर के पुराने संस्करण का उपयोग कर रहे हैं जो sys.dm_exec_describe_first_result_set का समर्थन नहीं करता है। या sp_describe_first_result_set


  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 सर्वर 2019 स्थापित करें

  2. कैसे एक varchar autoincrement करने के लिए

  3. SQL सर्वर के अंदर नियमित अभिव्यक्ति

  4. ExecuteNonQuery वापसी -1 क्वेरी स्ट्रिंग के बावजूद sql COUNT का उपयोग करते समय

  5. SQL सर्वर में एक लिंक्ड सर्वर बनाएँ (T-SQL उदाहरण)