RODBC sqlSave la création de la table des problèmes

Je vais avoir des problèmes lors de la création d'une table à l'aide de RODBC de sqlSave (ou, plus exactement, de l'écriture de données à la création de la table).

Ce qui est différent de l'existant sqlSave de questions/réponses, comme

  1. les problèmes qu'ils rencontraient étaient différents, je peux créer des tables alors qu'ils ne pouvaient pas et
  2. J'ai déjà unsuccesfully incorporé leurs solutions, telles que la fermeture et la réouverture de la connexion avant de lancer sqlSave, aussi
  3. Le message d'erreur est différent, à la seule exception d'un post qui était différent dans le au-dessus de 2 façons

Je suis à l'aide de MS SQL Server 2008 64-bit R sur un Windows RDP.

J'ai un simple bloc de données avec seulement 1 colonne complète de 3, 4 ou 5 chiffres entiers.

> head(df)
                        colname
1                           564
2                          4336
3                         24810
4                         26206
5                         26433
6                         26553

Lorsque j'essaie d'utiliser sqlSave, aucune donnée n'est écrite au tableau. En outre, un message d'erreur ressemble le tableau ne peut pas être créé si la table n'a en fait créé avec 0 ligne.

Fondée sur une proposition que j'ai trouvé, j'ai essayé de fermeture et de réouverture de la RODBC connexion juste avant l'exécution de sqlSave. Même si je les utilise append = TRUE, j'ai essayé de la suppression de la table avant de faire cela, mais il n'a pas d'incidence sur quoi que ce soit.

> sqlSave(db3, df, table = "[Jason].[dbo].[df]", append = TRUE, rownames = FALSE)
Error in sqlSave(db3, df, table = "[Jason].[dbo].[df]",  : 
  42S01 2714 [Microsoft][ODBC SQL Server Driver][SQL Server]There is already 
an object named 'df' in the database.
[RODBC] ERROR: Could not SQLExecDirect 'CREATE TABLE [Jason].[dbo].[df]  
("df" int)'

J'ai aussi essayé d'utiliser sqlUpdate() sur la table une fois, il a été créé. Ce n'est pas grave si je le crée dans R ou dans SQL Server Management Studio, j'obtiens l'erreur table not found on channel

Enfin, notez que j'ai aussi essayé sans append = TRUE et lors de la création d'une nouvelle table, ainsi qu'avec et sans le rownames option.

M. Flick de Freenode s #R a moi de vérifier si je pouvais le lire dans la table vide à l'aide de sqlQuery et en effet, je peux.

Mise à jour

J'ai eu un peu de plus près les étapes suivantes:

  1. J'ai créé une connexion ODBC qui va directement à ma Base de données dans SQL Server, au lieu de simplement à la valeur par défaut (Master) DB puis en spécifiant le chemin d'accès à la table dans le table = ou tablename = états
  2. La création de la table dans SQL Server Management Studio comme suit

GO

CREATE TABLE [dbo].[testing123](
[Person_DIMKey] [int] NULL
) ON [PRIMARY]

GO

  1. Dans la R j'ai utilisé sqlUpdate avec ma nouvelle connexion ODBC et pas de parenthèses autour du nom de la table

  2. Maintenant sqlUpdate() voit le tableau, cependant il se plaint qu'il a besoin d'une colonne unique

  3. Indiquant que la seule colonne de la table est l'unique colonne avec index = colname résultats dans un message d'erreur indiquant que la colonne n'existe pas

  4. J'ai supprimé et recréé la table de spécification d'une clé primaire,

GO

CREATE TABLE [dbo].[jive_BNR_Person_DIMKey](
[jive_BNR_Person_DIMKey] [int] NOT NULL PRIMARY KEY
) ON [PRIMARY]

GO

qui a généré à la fois d'une Clé Primaire et de l'Index (en fonction de l'interface graphique utilisateur de SQL server Management Studio) nommé PK__jive_BNR__2754EC2E30F848ED

  1. J'ai précisé que cet indice/touche que la colonne unique dans sqlUpdate (), mais j'obtiens l'erreur suivante:

Error in sqlUpdate(db4, jive_BNR_Person_DIMKey, tablename = "jive_BNR_Person_DIMKey", :
index column(s) PK__jive_BNR__2754EC2E30F848ED not in database table

Pour l'enregistrement, j'ai été en spécifiant le bon nom de la colonne (pas de "colname") pour l'indice; grâce à MrFlick pour demander des éclaircissements.

Aussi, ces étapes sont numérotées de 1 à 7 dans mon post mais StackOverflow réinitialise la numérotation de la liste de quelques-uns des moments où il est affiché. Si quelqu'un peut m'aider à nettoyer l'aspect de ce post, je l'apprécierais.

  • J'ai réouvert ce parce que je pense que @Andrie peut-être été un peu vite en besogne. Le potentiel de double n'ont pas de réponse claire, et vous semblez avoir déjà essayé la principale suggestion de toute façon.
  • Soyez conscient, cependant, que ces sortes de questions peut être difficile pour les personnes sans accès à votre base de données à l'aide. (Au moins pour la R des gens qui peuvent ou peuvent ne pas être en db experts.) Une possibilité est que le R est de tenter d'ajouter, mais en quelque sorte la structure de la table ne correspond pas à votre bloc de données assez bien, il est tentant d'en créer un nouveau et de l'échec, parce qu'un tableau de ce nom existe.
  • Juste assez. J'ai aussi essayé sans append = TRUE et la création d'une nouvelle table, j'ai eu le même problème.
  • Merci, @joran je ne suis pas encore habitué à ces nouveaux super-pouvoirs. Je voulais marquer le double, ne pas tuer la question complètement.
InformationsquelleAutor Hack-R | 2014-05-28