2010-11-12 7 views
1

Est-il possible dans SQL SERVER (05 & 08) d'insérer des enregistrements d'un fichier externe dans une table temporaire? Je n'ai aucun privilège sur la base de données. Voici ce que j'ai essayé de le faire:Insérer des enregistrements dans une table dans le serveur SQL

CREATE table #temp 
(KEY_ID INT) 

INSERT INTO #temp 
SELECT 90883000 

Ran #temp table résultat:

KEY_ID 
--------- 
90883000 

Il genre de travaux avec un seul enregistrement. Comment faire si j'ai des centaines de dossiers? Merci beaucoup!!!

Répondre

2

Ce juste pour montrer comment ajouter plusieurs lignes dans une table.

CREATE table #temp(
    KEY_ID integer 
) 

Declare @i as int 

set @i = 1 

WHILE (@i <= 10000) 
BEGIN 

insert into #temp values(@i) 

set @i += 1 

End 
0

Que diriez-vous d'une variable de table. Je crois que le #temp besoin de droits à la base de données tempdb. Je crois qu'une variable de table est utilisée comme n'importe quelle autre variable basée sur la session.

Pour déclarer une variable de table:

DECLARE @ProductTotals TABLE 
(
    ProductID int, 
    Revenue money 
) 

Insérer dans une variable de table:

INSERT INTO @ProductTotals (ProductID, Revenue) 
    SELECT ProductID, SUM(UnitPrice * Quantity) 
    FROM [Order Details] 
    GROUP BY ProductID 
+0

Merci à tous. Les enregistrements que j'essayais d'importer dans la temp proviennent de l'extérieur de la base de données. – joe

0

Pour l'importation de fichiers, vous pouvez utiliser BULK IMPORT. Utilisez ceci pour obtenir les données dans votre table temporaire, puis vous pouvez exécuter des opérations basées sur les ensembles.


Un moyen plus efficace d'insérer un grand nombre de lignes.

INSERT INTO #temp 
(KeyID) 
SELECT TOP 1000 -- PUT YOUR QUANTITY HERE 
     IDENTITY(INT,1,1) AS N 
FROM Master.dbo.SysColumns sc1, 
    Master.dbo.SysColumns sc2 

Si vous allez utiliser ce lot, juste leur demander de vous créer un TALLY TABLE.

+0

Merci Brad. Les enregistrements que j'essayais d'insérer proviennent de l'extérieur de la base de données. Donc, je ne sais pas si cela fonctionnerait. – joe

+0

Qu'est-ce que vous essayez de faire avec le fichier? À quel point votre accès est-il limité? – Brad

+0

J'essaie de faire correspondre les enregistrements que je veux insérer dans une temp tb avec les enregistrements de la table existante. Je pourrais faire quelque chose comme ceci sélectionnez key_id de table1 où key_id dans (90883000, ..., ..., ..., ...). Cette méthode fonctionne pour une poignée mais pas efficace quand elle est en hundreads). C'est pourquoi j'ai essayé de créer une temp pour rejoindre table1. – joe

0

Voici comment je le fais habituellement si j'ai les valeurs dans un fichier quelque part. Insertion de centaines d'enregistrements à partir d'un fichier texte plat dans la table temporaire. Mon exemple n'a qu'une seule colonne, mais tant que le fichier plat est délimité d'une manière ou d'une autre, vous pouvez faire autant de colonnes que nécessaire. Vous devez vous assurer de placer le fichier texte dans un répertoire auquel vous avez accès.

IF OBJECT_ID('tempdb..#TempTable') IS NOT NULL DROP TABLE #TempTable 

CREATE TABLE #TempTable(Col1 varchar(10)) --Specify temp-table name & columns 

    BULK INSERT #TempTable 
     FROM 'C:\FileName.txt'   --Specify file path/name 
     WITH (
     FIELDTERMINATOR = '\t', 
     ROWTERMINATOR = '\n' 
     ); 
    GO 
Questions connexes