Wczytywam pliki CSV do tymczasowych tabel, jak poniżej:
select *
into #Temp
from openrowset("Microsoft.ACE.OLEDB.12.0",
"Text;Database=D:DataFolder;",
"SELECT * from [DataFile.csv]") as x;
Sterownik OLEDB określa typ dla każdej kolumny.
Ale tabele tymczasowe nie pojawiają się w INFORMATION_SCHEMA.COLUMNS
.
Jak mogę określić typ danych dla każdej kolumny wynikowej #Temp
stół?
Odpowiedzi:
2 dla odpowiedzi № 1Poniższy kod pokazuje, jak uzyskaćinformacje dla wszystkich kolumn. Zwróć uwagę, że w [tempdb] nazwa tabeli to "____" z wieloma podkreśleniami. Więc musisz uzyskać do niego dostęp jako "LIKE __%", ale to powinno działać.
Jako bonus dodałem kod, aby uzyskać liczbę wierszy.
Jako notatkę, zwykle po prostu "SELECT INTO ...", a następnie skrypty tabeli i ręcznie utworzyć tabelę temp. Ale poniższy kod będzie działał zgodnie z oczekiwaniami.
CREATE TABLE #test
(
[id] INT
, [name] NVARCHAR(12)
);
--
-- get columns and types
-------------------------------------------------
SELECT [columns].[name]
, [types].[name]
, [columns].*
, [types].*
FROM [tempdb].[sys].[columns] AS [columns]
JOIN [tempdb].[sys].[tables] AS [tables]
ON [tables].[object_id] = [columns].[object_id]
JOIN [sys].[types] AS [types]
ON [types].[user_type_id] = [columns].[user_type_id]
WHERE [tables].[name] LIKE N"#test__%";
--
-- get row count
-------------------------------------------------
SELECT [objects].[name] AS [table]
, [dm_db_partition_stats].[row_count] AS [row_count]
, *
FROM [tempdb].[sys].[dm_db_partition_stats] AS [dm_db_partition_stats]
INNER JOIN [tempdb].[sys].[objects] AS [objects]
ON [dm_db_partition_stats].[object_id] = [objects].[object_id]
WHERE [objects].[name] LIKE "#test%";