INSERT INTO @ TABLE EXEC @query with SQL Server 2000
Czy to prawda, że SQL Server 2000, nie można wstawić do zmiennej tabeli za pomocą exec?
Wypróbowałem ten skrypt i dostałem komunikat o błędzie EXECUTE cannot be used as a source when inserting into a table variable.
declare @tmp TABLE (code varchar(50), mount money)
DECLARE @q nvarchar(4000)
SET @q = 'SELECT coa_code, amount FROM T_Ledger_detail'
INSERT INTO @tmp (code, mount)
EXEC sp_executesql (@q)
SELECT * from @tmp
Jeśli to prawda, to co mam zrobić? 3 answers
N. B. - to pytanie i odpowiedź odnoszą się do wersji 2000 SQL Server. W późniejszych wersjach ograniczenie INSERT INTO @table_variable ... EXEC ...
zostało zniesione, więc nie dotyczy ono tych późniejszych wersji.
Będziesz musiał przełączyć się na tabelę temp:
CREATE TABLE #tmp (code varchar(50), mount money)
DECLARE @q nvarchar(4000)
SET @q = 'SELECT coa_code, amount FROM T_Ledger_detail'
INSERT INTO #tmp (code, mount)
EXEC sp_executesql (@q)
SELECT * from #tmp
Z dokumentacji :
Zmienna tabelkowa zachowuje się jak zmienna lokalna. Ma dobrze zdefiniowany zakres, czyli funkcję, procedurę składowaną lub partię, w której jest deklarowana.
Wewnątrz jego zakres, zmienna table może być używana jak zwykła tabela. Może być stosowany wszędzie tam, gdzie wyrażenia tabeli lub tabeli są używane w instrukcjach SELECT, INSERT, UPDATE i DELETE. Jednakże tabela nie może być używana w następujących instrukcjach:
INSERT INTO table_variable EXEC stored_procedure
SELECT select_list INTO table_variable statements.
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
2020-06-20 09:12:55
Dokumentacja wprowadza w błąd.
Mam następujący kod uruchomiony w produkcji
DECLARE @table TABLE (UserID varchar(100))
DECLARE @sql varchar(1000)
SET @sql = 'spSelUserIDList'
/* Will also work
SET @sql = 'SELECT UserID FROM UserTable'
*/
INSERT INTO @table
EXEC(@sql)
SELECT * FROM @table
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
2016-09-11 21:04:04
DECLARE @q nvarchar(4000)
SET @q = 'DECLARE @tmp TABLE (code VARCHAR(50), mount MONEY)
INSERT INTO @tmp
(
code,
mount
)
SELECT coa_code,
amount
FROM T_Ledger_detail
SELECT *
FROM @tmp'
EXEC sp_executesql @q
Jeśli chcesz w dynamicznym zapytaniu
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-01-31 10:22:29