SELECT INTO A Table variable in T-SQL
Otrzymałem złożone zapytanie SELECT, z którego chciałbym wstawić wszystkie wiersze do zmiennej tabeli, ale T-SQL na to nie pozwala.
W tych samych wierszach nie można używać zmiennej table z zapytaniami SELECT INTO lub INSERT Exec. http://odetocode.com/Articles/365.aspx
Krótki przykład:
declare @userData TABLE(
name varchar(30) NOT NULL,
oldlocation varchar(30) NOT NULL
)
SELECT name, location
INTO @userData
FROM myTable
INNER JOIN otherTable ON ...
WHERE age > 30
DANE w zmiennej table będą później używane do wstawiania/aktualizowania ich z powrotem do różnych tabel (głównie Kopia tych samych danych z drobnymi aktualizacjami). Celem tego byłoby po prostu uczynienie skryptu nieco bardziej czytelnym i łatwiejszym do dostosowania niż wykonywanie SELECT INTO
bezpośrednio w odpowiednich tabelach.
Wydajność nie jest problemem, ponieważ rowcount
jest dość mały i jest uruchamiany ręcznie tylko w razie potrzeby.
...albo powiedz mi, czy robię to źle.
8 answers
Spróbuj czegoś takiego:
DECLARE @userData TABLE(
name varchar(30) NOT NULL,
oldlocation varchar(30) NOT NULL
);
INSERT INTO @userData (name, oldlocation)
SELECT name, location FROM myTable
INNER JOIN otherTable ON ...
WHERE age > 30;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-17 23:13:12
Celem SELECT INTO
jest (zgodnie z docs, mój nacisk)
Do Utwórz nową tabelę z wartości w innej tabeli
Ale ty już masz } tabelę docelową! So what you want is
Instrukcja
INSERT
dodaje jeden lub więcej nowych wierszy do TabeliMożesz określić wartości danych w następujące sposoby:
...
Używając subquery
SELECT
, aby określić wartości danych dla jednego lub więcej wierszy, takie jak:INSERT INTO MyTable (PriKey, Description) SELECT ForeignKey, Description FROM SomeView
I w tej składni dopuszcza się, aby MyTable
była zmienną tabel.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-01 10:28:52
Do przechowywania tymczasowych zbiorów danych można również używać popularnych wyrażeń tabel. Są bardziej eleganckie i przyjazne adhoc:
WITH userData (name, oldlocation)
AS
(
SELECT name, location
FROM myTable INNER JOIN
otherTable ON ...
WHERE age>30
)
SELECT *
FROM userData -- you can also reuse the recordset in subqueries and joins
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-22 16:54:43
Możesz spróbować użyć tabel tymczasowych...
SELECT name, location INTO #userData FROM myTable
INNER JOIN otherTable ON ...
WHERE age>30
Pomiń wysiłek, aby zadeklarować tabelę w ten sposób... Pomaga w zapytaniach adhoc...Tworzy to lokalną tabelę tymczasową, która nie będzie widoczna dla innych połączeń, chyba że użyjesz tego samego połączenia w całej aplikacji.
Jeśli potrzebujesz zmiennych, można je zadeklarować w ten sposób:
DECLARE @userData TABLE(
name varchar(30) NOT NULL,
oldlocation varchar(30) NOT NULL
);
INSERT INTO @userData
SELECT name, location FROM myTable
INNER JOIN otherTable ON ...
WHERE age > 30;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-18 20:18:46
Spróbuj użyć INSERT
zamiast SELECT INTO
:
INSERT @UserData
SELECT name, location etc.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-15 19:13:20
Najpierw Utwórz tabelę temp:
Krok 1:
create table #tblOm_Temp (
Name varchar(100),
Age Int ,
RollNumber bigint
)
**Krok 2: * * Wstaw jakąś wartość w tabeli Temp .
insert into #tblom_temp values('Om Pandey',102,1347)
Krok 3: Zadeklaruj zmienną tabelkową do przechowywania danych tabeli temp.
declare @tblOm_Variable table(
Name Varchar(100),
Age int,
RollNumber bigint
)
Krok 4: wybierz wartość z tabeli temp i wstaw do zmiennej table.
insert into @tblOm_Variable select * from #tblom_temp
Ostatecznie wartość jest wstawiana z tabeli temp do zmiennej Table
Krok 5: może sprawdzić wstawioną wartość w zmiennej table.
select * from @tblOm_Variable
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-22 04:43:43
OK, teraz z wystarczającym wysiłkiem jestem w stanie wstawić do @table używając poniższego:
INSERT @TempWithheldTable SELECT
a. SuspendedReason, a. zawieszone, a. SuspendedBy , a. ReasonCode z OPENROWSET (BULK ' C:\DataBases\WithHeld.csv', FORMATFILE = N'C:\DataBases\Format.txt',
ERRORFILE = N'C:\Temp\MovieLensRatings.txt" ) Jako;
Najważniejsze jest wybranie kolumn do wstawienia .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-22 09:29:53
Jednym z powodów użycia SELECT INTO jest to, że pozwala na użycie tożsamości:
SELECT IDENTITY(INT,1,1) AS Id, name
INTO #MyTable
FROM (SELECT name FROM AnotherTable) AS t
To nie zadziała ze zmienną tabelkową, co jest przykre...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-23 00:20:30