2016-05-06 6 views
2

Je réussis à insérer des valeurs de la variable de table dans la nouvelle table temporaire (pas encore existante). Pas de problèmes lors de l'insertion d'un petit nombre de lignes (par exemple 10.000), mais lors de l'insertion dans une variable de table un grand nombre de lignes (par exemple 30.000) renvoie une erreur "Serveur à court de mémoire et ressources externes) le problème: Je divise mes (60 000) lignes Variable de table en petites séries (par exemple 10 000) chacune, pensant pouvoir insérer de nouvelles données dans la table temporaire déjà existante, mais je reçois ce message d'erreur:Insérer des valeurs de la variable de table dans la table temporaire déjà existante

. déjà un objet nommé '## TempTable' dans la base de données

Mon code est:

USE MyDataBase; 
Go 

Declare @@TableVariable TABLE 
(
[ID] bigint PRIMARY KEY, 
[BLD_ID] int NOT NULL 
-- 25 more columns 
) 
Insert Into @@TableVariable VALUES 
(1,25), 
(2,30) 
-- 61,000 more rows 

Select * Into #TempTable From @@TableVariable; 
Select Count(*) From #TempTable; 

Ci-dessous le message d'erreur que je reçois

enter image description here

+0

Je pense que cela est une limite sur les scripts. –

+0

Mémoriser @@ Les tables sont stockées en mémoire, donc si vous avez un message "OutOfmemory", vous n'avez peut-être pas assez de mémoire. J'ai suggéré de créer un tempTable pyhiscal (sans @ @ Table) si vous le pouvez et vérifiez si vous recevez le même message. – Beto

+0

N'avez pas l'autorisation de créer quoi que ce soit ... Est-ce que vous savez si je peux ajouter de nouvelles données à un TempTable existant à partir de la source Table Variable? – enigma6205

Répondre

0

Le problème est que SELECT INTO veut créer la table de destination, donc au deuxième terme, vous obtenez l'erreur.

vous devez d'abord créer le #temptable:

/* this creates the temptable copying the @TableVariable structure*/ 
Select * 
Into #TempTable 
From @TableVariable 
where 1=0; 

maintenant vous pouvez parcourir vos lots et appeler cet insert autant de fois que vous voulez ..

insert Into #TempTable 
Select * From @TableVariable; 

attention salariale #temptable est différent de ## TempTable (# = Local, ## = Global) et n'oubliez pas de le laisser tomber lorsque vous avez terminé.

aussi vous devriez PAS utiliser @@ pour vous la variable table, utilisez uniquement @TableVariable

J'espère que cette aide