Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 8
  • 366

Mam problem z zapytaniem, które uzupełnia dane jednej tabeli na podstawie danych ze skomplikowanego zapytania, które wylicza i zwraca jakieś dane. Otrzymuję komunikat jak w temacie. Wiem, że któraś kolumna w mojej docelowej tabeli ma ograniczenie na rozmiar, ale nie wiem która. Jak w łatwy sposób wyłapać, która to kolumna? Tabela zawiera 200 kolumn i odpada ręczne sprawdzanie na podstawie danych. Co zrobić?

Jacek_Górski
  • Zapytał
  • @ Jacek_Górski | 02.07.2014
    • laureat
    • 27
    • 5
    • 33

Odpowiedź (1)

  • 5

Pierwszym rozwiązaniem problemu, które przychodzi mi na myśl, jest utrwalenie wyniku skomplikowanego zapytania np. w tabeli tymczasowej i porównanie metadanych tabeli tymczasowej i docelowej (typów danych i maksymalnych długości) za pomocą zapytania do katalogu bazy danych.

Jeżeli utrwalanie wyniku z jakiegoś powodu nie wchodzi w grę, można użyć do porównania metadanych tabeli docelowej i dynamicznej funkcji zarządzania (DMF) o nazwie sys.dm_exec_describe_first_result_set. Elementy tej koncepcji można zrealizować, np. w ten sposób:

1. Tabela docelowa:

CREATE TABLE Contacts 
(id int identity primary key, 
type varchar(20), 
 details varchar(30));

INSERT INTO Contacts
(type, details)
VALUES
('Email', 'admin@sql.com'),
('Twitter', '@sql');

 

2. Metadane tabeli docelowej:

SELECT ORDINAL_POSITION,COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Contacts';


3. Metadane zapytania:

SELECT COLUMN_ORDINAL, NAME, SYSTEM_TYPE_NAME,MAX_LENGTH 
FROM sys.dm_exec_describe_first_result_set
('Select id,type,details from Contacts', NULL, 0) ;

 

  • Odpowiedział
  • @ | 02.07.2014
  • TRENER ALTKOM AKADEMII