Échec de l'insertion en bloc SQL Server (lié au réseau)

Je suis assez nouveau à SQL Server.

J'essaie d'insert en bloc dans une table en utilisant la command dans SQL Server Management Studio (2005):

BULK INSERT Table1 FROM 'c: \ text.txt' WITH (FIELDTERMINATOR = '|')

J'ai l'erreur:

Msg 4860, niveau 16, état 1, ligne 1 Impossible de charger en bloc. Le file "c: \ text.txt" n'existe pas.

Je suis certain que le file existe réellement.

J'ai l'printing qu'il cherche le file sur le disque dur local pour l'endroit où le server est. Est-ce le cas? Si oui, comment résous-tu généralement ce problème? (A noter, j'ai essayé de spécifier l'adresse réseau de mon PC lors de la saisie de l'location du file text, mais je reçois une erreur de permission.En outre, je sais à l'avance que ma société n'autorise pas les files sur un server ).

SQL Server n'a pas une instruction SQL qui lit datatables de la fin du client (comme les autres affiches l'ont souligné). D'autres produits SGBDR implémentent cela (par exemple, l'instruction COPY Postgres vous permet de spécifier un file sur le server ou un file sur le client lu par la bibliothèque de connectivité db côté client).

Vous pouvez get des données de déplacement à partir d'un file sur le client vers une table sur SQL Server à l'aide du programme de command line bcp .

bcp vous permet de copyr des données d'un file local vers une table sur le server, ou d'une table (ou select une requête) sur le server dans un file local. Par exemple:

bcp servername.dbname.tablename in c:\temp.txt -T -c 

copyra un file délimité par tabulation (temp.txt) dans la table spécifiée (en supposant que le file contienne le bon nombre de colonnes).

Je ne suis pas sûr si cela aide, mais c'est la seule manière de déplacer des données d'un file de client à une table de server sans donner au server une sorte d'access à travers le réseau au file de données sur le client.

Je suis d'accord que c'est un problème avec le file sur votre lecteur C, et pas le lecteur du server.

S'il s'agit d'un problème d'permissions, avez-vous essayé de créer un partage de files sur votre post de travail dont le server est autorisé à lire? Peut-être quelque chose comme \ YourWorkstation \ SQLFile, puis accorder à tout le monde (ou invité, en fonction de la façon dont les permissions de votre réseau sont configurés) l'access en lecture sur elle?

Si vous ne pouvez pas créer le partage sur votre ordinateur portable, ou si vous ne pouvez pas lui accorder des droits pour une raison quelconque, y a-t-il un partage de files dans le bureau auquel vous avez droit et que SQL peut également lire? Peut-être un NAS ou un dossier réseau "commun"?

Avez-vous créé un lecteur de partage sur votre machine que le server peut voir? Si oui, il vous suffit de vous référer au path d'access, y compris le nom de votre machine au lieu de C:

Oui, il cherchera le file sur le server SQL lui-même.

Si vous pouvez mapper un lecteur réseau au lecteur C de votre server SQL, vous pouvez simplement copyr le file avant d'exécuter l'insertion en bloc.

Si vous ne pouvez absolument pas accéder au système de files du server, vous pouvez faire quelque chose comme ceci:

  • écrire un programme qui lit votre file text et insère le contenu dans un logging unique dans une table temporaire qui a un champ de text, peut-être en utilisant une procédure stockée
  • requestr au programme d'exécuter la command bcp pour exporter datatables de la table temporaire dans un file text sur le système de files local du server SQL vers un dossier dans lequel le count sous lequel le service SQL s'exécute dispose d'une autorisation d'écriture
  • avoir le programme exécuter une command d'insertion en bloc spécifiant le path d'access au file text sur le server
  • supprime le file text et la table temporaire