2008-11-06 13 views
2

J'ai créé un proc qui saisit toutes les tables utilisateur dans un DB local sur ma machine. Je veux être capable de créer un fichier plat de toutes mes tables en utilisant BCP et SQL. C'est une base de données fictive dans SQL 2000 se connectant via l'authentification Windows. J'ai défini ma variable de chemin d'environnement dans WinXP SP2. J'ai créé de nouveaux utilisateurs pour accéder à la base de données, éteint mon pare-feu, en utilisant une connexion de confiance. J'ai essayé des dizaines de forums, pas de chance.BCP out Erreur dans SQL2000: SQLState = 37000, NativeError = 4060

Dans l'invite de commande DOS, j'obtiens la même erreur. Erreur = [Microsoft] [Pilote ODBC SQL Server] [SQL Server] Impossible d'ouvrir la base de données demandée lors de la connexion '[HelpDesk-EasyPay']. La connexion échoue.

Voici mon SP:

@Path VARCHAR(100), 
    @UserName VARCHAR(15), 
    @PassWord VARCHAR(15), 
    @ServerName VARCHAR(15) 
AS 

set quoted_identifier off 
set nocount on 

declare @n int 
declare @db varchar(40) 
set @db=DB_NAME() 
declare @TableName varchar(15) 
declare @bcp varchar(200) 
select identity(int,1,1) as tblNo,name tblname into #T from Sysobjects where xtype='u' 
select @n=COUNT(*) from #T 

WHILE (@n>0) 
BEGIN 
    SELECT @TableName=tblname FROM #T WHERE [email protected] 
    PRINT 'Now BCP out for table: ' + @TableName 
    SET @bcp = "master..xp_cmdshell 'BCP " + "[" + @db + ".." + @TableName + "]" + " OUT" + @Path + "" + @TableName+".txt -c -U" + @UserName + " -P" + @PassWord + " -S" + @ServerName + " -T" + "'" 
    EXEC(@bcp) 
    SET @[email protected] 
END 

DROP TABLE #T 

Quelqu'un peut-il conseiller. Cela semble être un problème de connexion ou BCP? Pas certain.

edit: Je l'utilise depuis l'analyseur de requêtes car j'ai 118 tables à sortir en fichier plat. Je semble être d'accord que c'est un problème d'authentification parce que j'ai essayé de me connecter à master db avec le nom d'utilisateur sa mot de passe root. qui est ce que son ensemble à et je reçois la même erreur: SQLState = 37000, NativeError = 4060

En vous remerciant d'avance. EJ

+0

Quelle est la chaîne de ligne de commande que vous utilisez pour l'exécuter? Cela ressemble à un problème d'authentification. – Light

+0

Je cours ceci à partir de l'analyseur de question parce que j'ai 118 tables à la sortie au dossier plat. Je semble être d'accord que c'est un problème d'authentification parce que j'ai essayé de me connecter à master db avec le nom d'utilisateur sa mot de passe root. qui est ce que son ensemble et je reçois la même erreur: SQLState = 37000, NativeError = 4060 Si je l'exécute à partir de la ligne de commande, même erreur. Ça doit être quelque chose de petit qui me manque? –

+0

Aussi je crois que vous voulez "queryout" pas "out" – TravisO

Répondre

1

Vos supports étendent sur le nom complet de table qualifié - seuls les composants individuels doivent être placés entre crochets:

bcp [HelpDesk-EasyPay].dbo.[customer] out d:\MSSQL\Data\customer.bcp -N -Utest -Ptest -T 

devrait fonctionner, si vous voulez:

SET @bcp = "master..xp_cmdshell 'BCP " + "[" + @db + "]..[" + @TableName + "]" + " OUT" + @Path + "" + @TableName+".txt -c -U" + @UserName + " -P" + @PassWord + " -S" + @ServerName + " -T" + "'" 

dans votre code. Il semble que le message d'erreur que vous avez donné a été tronqué, sinon vous auriez pu voir qu'il tentait d'ouvrir la base de données "[HelpDesk-EasyPay.dbo.customer]" qui, bien sûr, n'existe pas, et même si elle fait, vous obtiendrez alors une erreur qu'aucune table n'a été spécifiée.

0

J'ai la même question pour la OUT (le caractère moins tue tout le cas^ne fonctionnent pas)

J'évite avec le queryout. Comme ceci:

SET @s = 'BCP "SELECT * FROM [HelpDesk-EasyPay].dbo.customers" QUERYOUT myfile.txt ...' 
+0

ou simplement utiliser le paramètre -q dans la commande BCP – podosta