Przedmówię to, dając wam wszystkim znać, że obiecałem sobie kilka lat temu, że nie będę używał kursora w SQL, gdzie nie jest potrzebny. Niestety myślę, że będę musiał użyć jednego w mojej obecnej sytuacji, ale to było tak długie, że staram się zapamiętać poprawną składnię.Kursor SQL do używania nazw tabel i pól z tabeli Temp
Zasadniczo mam problem z CONVERT_IMPLICIT
dzieje się w kwerendach, ponieważ mam typy danych, które są różne dla tego samego pola w różnych tabelach, więc chciałbym ostatecznie przekonwertować te do int
. Ale aby to zrobić, muszę sprawdzić, czy wszystkie dane można przekonwertować na int, czy nie, aby zobaczyć, jak duże jest to zadanie.
Mam poniższe zapytanie, które daje mi listę wszystkich tabel w bazie danych, które zawierają odpowiednie pole na liście;
IF OBJECT_ID('tempdb..#BaseData') IS NOT NULL DROP TABLE #BaseData
GO
CREATE TABLE #BaseData (Table_Name varchar(100), Field_Name varchar(100), Data_Type_Desc varchar(20), Data_Max_Length int, Convertible bit)
DECLARE @FieldName varchar(20); SET @FieldName = 'TestFieldName'
INSERT INTO #BaseData (Table_Name, Field_Name, Data_Type_Desc, Data_Max_Length)
SELECT
o.name ,c.name ,t.name ,t.max_length
FROM sys.columns c
JOIN sys.types t
ON c.user_type_id = t.user_type_id
JOIN sys.objects o
ON c.object_id = o.object_id
WHERE c.name LIKE '%' + @FieldName + '%'
AND o.type_desc = 'USER_TABLE'
Co daje takie wyniki;
Table_Name Field_Name Data_Type_Desc Data_Max_Length Convertible
Table1 TestFieldName varchar 8000 NULL
Table2 TestFieldName nvarchar 8000 NULL
Table3 TestFieldName int 4 NULL
Table4 TestFieldName varchar 8000 NULL
Table5 TestFieldName varchar 8000 NULL
Co chciałbym zrobić, to sprawdzić, czy wszystkie dane w odpowiedniej tabeli & dziedzinie mogą być konwertowane do int i aktualizować „cabrio” pole (1 czy jest dane, które nie mogą być zamienione , 0, jeśli dane są w porządku). Mam następujące obliczenia, które działa idealnie dobrze;
'SELECT
CASE
WHEN COUNT(' + @FieldName + ') - SUM(ISNUMERIC(' + @FieldName + ')) > 0
THEN 1
ELSE 0
END
FROM ' + @TableName
I daje wynik, że jestem po. Ale staram się uzyskać poprawną składnię, aby utworzyć kursor, który będzie wyglądać w każdym wierszu w mojej tabeli tymczasowej i odpowiednio uruchomić ten SQL. Następnie musi zaktualizować końcową kolumnę tabeli tymczasowej z wynikiem zapytania (1 lub 0).
To będzie trzeba uruchomić na kilkuset bazach danych, dlatego potrzebuję tej listy, aby była dynamiczna, w niektórych bazach danych mogą być również niestandardowe tabele (w rzeczywistości jest to całkiem prawdopodobne).
Jeśli ktokolwiek mógłby udzielić wskazówek, byłoby to bardzo cenne.
Dzięki
Naprawdę nie jest częścią odpowiedzi, ale czułem, że twoja definicja Convertible i twoje zapytanie o definicję cabrio były być może sprzeczne ze sobą i używając twojego zapytania kolumna końcowa mogłaby być nazwana Not Convertible ... – SMM
Jesteś absolutnym świętym . Tak, teraz logika jest tutaj, mogę grać i przejść do następnego kroku z tym. Doceniane, dziękuję. Muszę poczekać do jutra przed przyznaniem nagrody. –