Witam mam taki problem i nie do końca mogę znaleźć rozwiązanie. Potrzebuje stworzyć zapytanie, w którym 2 tabele zostaną ze sobą porównane nie pod kontem rekordów a pod kontem kolumn. Przykładowo mamy jedną tabele, która posiada 100 kolumn i drugą, która jest bardzo podobna i chcę ze sobą porównać je i sprawdzić które których kolumn nie ma jednej z nich.
- Rejestracja:około 7 lat
- Ostatnio:prawie 7 lat
- Postów:13
- Rejestracja:ponad 22 lata
- Ostatnio:około 7 godzin
- Postów:3866
SELECT kolA,
KolB
FROM
(
SELECT column_name kolA
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'nazwa_tabeli_1'
) a
FULL JOIN
(
SELECT column_name kolB
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'nazwa_tabeli_2'
) b ON a.kolA = b.kolB;

- Rejestracja:około 7 lat
- Ostatnio:prawie 7 lat
- Postów:13
Dziękuję Panczo, ale to nie jest cały czas to o co pytam. Jeśli będe miał na przykład 1000 kolumn to nie chce ich wypisywać po kolei. Chce CAŁE 2 tabele ze sobą porównać, takie które mają dowolną ilość kolumn w celu sprawdzenia które kolumny z tabeli 1 występuję w tabeli 2 ale bez wypisywania poszczególnych kolumn w selekcie
- Rejestracja:ponad 22 lata
- Ostatnio:około 7 godzin
- Postów:3866
To co Ci podałem zwróci Ci w wyniku kolumny z tabeli nazwa_tabeli_1 (kolA) i kolumny z nazwa_tabeli_2 (kolB) jeżeli jakiejś kolumny nie będzie w nazwa_tabeli_2 to kolumna będzie miała wartość null i anlogicznie w drugą stronę. Jeżeli chcesz zobaczyć różnicę to wystarczy dodać warunek:
where
kolA is null or kolb is null
Czego innego oczekujesz?
- Rejestracja:około 7 lat
- Ostatnio:prawie 7 lat
- Postów:13
Dziękuję bardzo Panczo! Widziałem to troche inaczej w głowie, ale finalnie o to właśnie jednak chodzi :) Natomiast mam jeszcze jedno pytanie. Czy taką samą funkcję można stworzyć dla widoków w MS SQL.
próbowałem zmienić to dla widoków ale wyrzuca jakieś błędy i nie działa.
- Rejestracja:około 7 lat
- Ostatnio:prawie 7 lat
- Postów:13
SELECT kolA,
KolB
FROM
(
SELECT view_name kolA
FROM INFORMATION_SCHEMA.VIEWS
WHERE VIEW_NAME = N'View1'
) a
FULL JOIN
(
SELECT view_name kolB
FROM INFORMATION_SCHEMA.COLUMNS
WHERE VIEW_NAME = N'View2'
) b ON a.kolA = b.kolB
WHERE
kolA IS NULL OR kolb IS NULL;
Czyli coś takiego?
- Rejestracja:około 7 lat
- Ostatnio:prawie 7 lat
- Postów:13
Kiedy próbuje zmienić samą tabelę na widok to pokazuje pustą kolumnę..
SELECT kolA,
KolB
FROM
(
SELECT column_name kolA
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'View1'
) a
FULL JOIN
(
SELECT column_name kolB
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'View2'
) b ON a.kolA = b.kolB
WHERE
kolA IS NULL OR kolb IS NULL;
SELECT* FROM [Project].[dbo].[View1] --- zwraca wszystkie kolumny z danymi
próbowałem też do TABLE_NAME podać "[Project].[dbo].[View1]" ale nie działa
Wrzucam załącznik ze screenem
- Screen Shot 03-20-18 at 12.07 PM.PNG (22 KB) - ściągnięć: 198
- Rejestracja:ponad 22 lata
- Ostatnio:około 7 godzin
- Postów:3866
A nie wpadło Ci do głowy, ze może ich struktura jest taka sama?
Puść bez warunku where:
SELECT kolA,
KolB
FROM
(
SELECT column_name kolA
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'View1'
) a
FULL JOIN
(
SELECT column_name kolB
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'View2'
) b ON a.kolA = b.kolB
Bo jak można się przekonać dla widoków też działa: http://sqlfiddle.com/#!18/0fa95/1
- Rejestracja:około 7 lat
- Ostatnio:prawie 7 lat
- Postów:13
ale ich struktura własnie nie jest taka sama(puszczałem bez where). Stworzyłem tak te widoki, że w jednym jest mniej o jedną kolumnę reszta jest taka sama, ale ten jeden null powinien pokazać.
Z resztą jak nawet sobie testowałem to tak, że zaznaczyłem fragment pierwszej części i dałem EXECUTE to wywołuje to samo czyli pokazuje puste kolA
- Rejestracja:około 7 lat
- Ostatnio:prawie 7 lat
- Postów:13
Panczo napisał(a):
A co zwracają poszczególne podzapytania?
edytowałem wyżej, opisałem bardziej szczegółowo
- Rejestracja:około 7 lat
- Ostatnio:prawie 7 lat
- Postów:13
Nie nie ma tam ich.
A czy w w strukturze - " WHERE TABLE_NAME = N'View1'" zamiast N'VIEW1' mogę wkleić dokładne umiejscowienie widoku czyli coś takiego - "N'[Project].[dbo].[View1]'" ?
Dodam jeszcze, że widoki są w osobym folderze w całej strukturze bazy - w folderze VIEWS

- Rejestracja:prawie 17 lat
- Ostatnio:około 8 godzin
- Postów:2792
Możesz to wkleić.
Ale wtedy nie dostaniesz NIC :)
W INFORMATION_SCHEMA.COLUMNS powinny być również kolumny SCHEMA_NAME i TABLE_NAME. Użyj ich.

- Rejestracja:ponad 22 lata
- Ostatnio:około 7 godzin
- Postów:3866
Możesz, to tylko zapytanie nikt nie broni, szukaj czego chcesz, tylko pamiętaj, ze kolumna table_name zawiera nazwę tabeli, schemat i baza są w innych kolumnach...
Jeżeli nie widzisz kolumn z tych widoków, a masz pewność, że te widoki są to jedyne co zostaje to uprawnienia do podglądu definicji tych obiektów (VIEW DEFINITION)
- Rejestracja:około 7 lat
- Ostatnio:prawie 7 lat
- Postów:13
Okej - problem był w tym, że nie widział tych widoków dlatego, że stworzyłem je poprzez narzędzie w ms sql do tworzenia widoków a nie przez new query. Teraz wszystko działa

- Rejestracja:około 7 lat
- Ostatnio:prawie 7 lat
- Postów:13
Panczo napisał(a):
Można ale nie w ten sposób, bez apostrofów i N na początku, parametr powinien być jako
nvarchar(128)
a przypisanie:
WHERE TABLE_NAME = @parameter
sam już doszedłem do tego, ale dziękuję - o to chodziło:)
kątem