2
votes

sélectionner des valeurs d'une base de données à une autre avec un serveur SQL

Bonjour, je dois passer une sélection d'une base de données qui se trouve sur une adresse IP à une autre base de données (identique) qui se trouve sur une adresse IP complètement différente, sous la requête comment passer pour effectuer le changement?

Code SQL:

/*Insert into database with same name into same table addres:: 172.16.50.98*/
Insert into 


/* select from database address: 172.16.50.96*/
SELECT IdUtente,Longitudine,Latitudine,Stato,DataCreazione
  FROM Quote.dbo.Marcatura
  where DataCreazione>'2019-01-08 18:37:28.773'


6 commentaires

Je le ferais via SSIS


est-ce mais comment est-ce fait?


Ou vous pouvez utiliser OPENQUERY , OPENROWSET ou des serveurs liés.


utiliser SSIS ou serveurs liés


s'il s'agit d'une activité ponctuelle, vous pouvez exporter vers csv depuis la source et importer depuis csv vers la destination.


@riki vous avez trois réponses de travail avez-vous essayé l'une d'entre elles ??


3 Réponses :


0
votes

Linked Server / OpenQuery est le moyen d'y parvenir. jetez un œil là-dessus.

y compris les paramètres dans OPENQUERY


0 commentaires

0
votes

Si les données importées ne sont pas volumineuses et que ce ne sera pas une tâche récurrente, un serveur lié serait probablement la meilleure option. En créer un via l'interface graphique SSMS est plus facile si vous ne l'avez pas fait auparavant, mais un exemple de création d'un en utilisant la procédure stockée SP_ADDLINKEDSERVER via T-SQL est ci-dessous. Si votre compte n'a pas accès à l'autre serveur, la procédure stockée SP_ADDLINKEDSRVLOGIN devra être utilisée pour configurer le serveur lié avec un compte disposant des autorisations appropriées sur le serveur source, ainsi que sur la base de données et tous les objets référencés. Bien que l'utilisation de la syntaxe du serveur lié (nom en 4 parties) soit plus simple et plus facile à lire, je recommande fortement de faire l'insertion avec OPENQUERY à la place si un seul serveur lié sera utilisé. Cela exécutera le SQL sur le serveur source, y appliquant tous les filtres et ne retournera que les lignes nécessaires, tandis que la syntaxe du serveur lié renverra toutes les lignes avant d'effectuer le filtrage. Vous pouvez en savoir plus sur les différences entre les deux ici . Vous avez indiqué que le nom de la base de données est le même sur les deux serveurs, ce qui suppose la même chose pour les noms de table et de schéma. Assurez-vous de les mettre à jour en conséquence s'ils diffèrent.

Si un grand volume de données est importé ou s'il s'agit d'un processus normal, créer un package SSIS et le configurer pour qu'il s'exécute en tant que travail de l'agent SQL sera la meilleure approche. Si vous choisissez d'emprunter cette voie, il y a un certain nombre de choses à considérer, mais les liens ci-dessous vous aideront à démarrer. SQL Server Data Tools (SSDT) ​​est l'endroit où les packages peuvent être développés. Bien que cela ne soit pas nécessaire, l'exécution des packages à partir du catalogue SSIS, SSISDB, sera beaucoup plus bénéfique que la simple utilisation du système de fichiers. Une destination OLE DB ou SQL Server peut être utilisée car la table dans laquelle le chargement est situé se trouve sur SQL Server, mais une destination SQL Server ne peut être utilisée que sur une base de données locale.

Serveur lié:

 --Create linked server
--SQL product name and SQLNCLI11 provider for SQL Server
EXEC [MASTER].DBO.SP_ADDLINKEDSERVER @server = N'MyLinkedServer', @srvproduct=N'SQL', 
@provider=N'SQLNCLI11', @datasrc=N'ServerIPAddress'


--OPENQUERY insert
INSERT INTO Quote.dbo.Marcatura (IdUtente, Longitudine, Latitudine, Stato, DataCreazione)
SELECT 
    IdUtente, 
    Longitudine, 
    Latitudine, 
    Stato, 
    DataCreazione
FROM OPENQUERY(MyLinkedServer, '
SELECT 
    IdUtente, 
    Longitudine, 
    Latitudine, 
    Stato, 
    DataCreazione
FROM Quote.dbo.Marcatura')


0 commentaires

0
votes

Solution SSIS

Je pense que cela nécessite un package SSIS très simple pour être réalisé:

  1. Créez deux Gestionnaire de connexions OLEDB ; un pour chaque serveur
  2. Ajouter une tâche de flux de données
  3. Dans la tâche de flux de données addan Source OLEDB et destination OLEDB
  4. Dans la source OLEDB ( 172.16.50.98 gestionnaire de connexions) sélectionnez commande SQL comme Mode d'accès et utilisez la commande suivante:

    SELECT IdUtente,Longitudine,Latitudine,Stato,DataCreazione
      FROM Quote.dbo.Marcatura
      where DataCreazione >'2019-01-08 18:37:28.773'
    
  5. Mappez les colonnes source sur la destination OLEDB ( 172.16.50.96 gestionnaire de connexions)

Liens utiles


0 commentaires