Actualisation et éxecution automatique
arthur
-
Reivax962 Messages postés 3742 Statut Membre -
Reivax962 Messages postés 3742 Statut Membre -
Bonjour, tous.
J'utilise sql server management studio.
Je lance chaque semaine des requetes du genre:
SELECT Client,
Cout,
LEFT([Time],
'Week36' as Semaine,
FROM dbo.mabase
WHERE
LEFT([Time], 8)>= '20100906'
and LEFT([Time], 8)<= '20100912'
Je me donne la peine d'actualiser manuellement la requete. Par exemple, pour la semaine prochaine il me faudra écrire Week37,20100913,20100919 aux lignes correspondantes.
J'attire votre attention sur le 'Week 36', il est entre apostrophes, c'est un champ que la requete crée, il ne se retrouve donc pas dans la base.
Je voudrais m'épagner de cette actualisation manuelle et aussi automatiser l'éxecution hebdomadaire de cette requete.
Du moins, je ne suis pas administrateur dans le serveur.
Merci de m'aider explicitement à le faire.
J'utilise sql server management studio.
Je lance chaque semaine des requetes du genre:
SELECT Client,
Cout,
LEFT([Time],
'Week36' as Semaine,
FROM dbo.mabase
WHERE
LEFT([Time], 8)>= '20100906'
and LEFT([Time], 8)<= '20100912'
Je me donne la peine d'actualiser manuellement la requete. Par exemple, pour la semaine prochaine il me faudra écrire Week37,20100913,20100919 aux lignes correspondantes.
J'attire votre attention sur le 'Week 36', il est entre apostrophes, c'est un champ que la requete crée, il ne se retrouve donc pas dans la base.
Je voudrais m'épagner de cette actualisation manuelle et aussi automatiser l'éxecution hebdomadaire de cette requete.
Du moins, je ne suis pas administrateur dans le serveur.
Merci de m'aider explicitement à le faire.
A voir également:
- Actualisation et éxecution automatique
- Réponse automatique thunderbird - Guide
- Logiciel de sauvegarde automatique gratuit - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Réponse automatique gmail - Guide
- Sommaire automatique word - Guide
10 réponses
Bonjour,
Pour l'automatisation, le mieux est de passer par un job SQL.
Mais puisque tu n'es pas administrateur, je te conseille de créer un fichier .bat qui exécute la requête. Pour ce faire, il faudrait que tu aies SQL Server d'installé sur ton poste.
Dans le fichier .bat, tu places le code suivant :
sqlcmd -H hostname -U user -P password -d database -i fichier.sql > resultat.txt
En remplaçant :
hostname par l'IP ou le nom du serveur hébergeant ta base
user par le nom d'utilisateur pour s'y connecter
password par le mot de passe à utiliser
database par le nom de ta base de données
fichier.sql par le nom du fichier texte dans lequel tu as écrit ta requête.
Le résultat se retrouvera dans un fichier resultat.txt.
Ensuite, ce fichier .bat doit être appelé : pour ça, je te conseille le planificateur de tâches de Windows.
Pour ta requête, tu peux la modifier comme ceci :
datepart(WW, uneDate) donne le numéro de semaine de uneDate.
Par contre, il faut que tu te méfies des conditions aux limites : plusieurs normes existent sur la numérotation de la première et de la dernière semaine de l'année (un vendredi 1er janvier fait-il partie de la dernière semaine de l'année précédente, ou de la première de l'année qui débute ?).
Je te laisse vérifier que la norme que tu utilises correspond bien et, au besoin, je te laisse adapter la requête.
Xavier
Pour l'automatisation, le mieux est de passer par un job SQL.
Mais puisque tu n'es pas administrateur, je te conseille de créer un fichier .bat qui exécute la requête. Pour ce faire, il faudrait que tu aies SQL Server d'installé sur ton poste.
Dans le fichier .bat, tu places le code suivant :
sqlcmd -H hostname -U user -P password -d database -i fichier.sql > resultat.txt
En remplaçant :
hostname par l'IP ou le nom du serveur hébergeant ta base
user par le nom d'utilisateur pour s'y connecter
password par le mot de passe à utiliser
database par le nom de ta base de données
fichier.sql par le nom du fichier texte dans lequel tu as écrit ta requête.
Le résultat se retrouvera dans un fichier resultat.txt.
Ensuite, ce fichier .bat doit être appelé : pour ça, je te conseille le planificateur de tâches de Windows.
Pour ta requête, tu peux la modifier comme ceci :
SELECT Client, Cout, LEFT([Time],8) 'Week' + cast(datepart(WW, dateadd(d, -7, getdate())) as varchar(2)) as Semaine, FROM dbo.mabase WHERE datepart(WW, dateadd(d, -7, getdate()) = datepart(WW, [Time])
datepart(WW, uneDate) donne le numéro de semaine de uneDate.
Par contre, il faut que tu te méfies des conditions aux limites : plusieurs normes existent sur la numérotation de la première et de la dernière semaine de l'année (un vendredi 1er janvier fait-il partie de la dernière semaine de l'année précédente, ou de la première de l'année qui débute ?).
Je te laisse vérifier que la norme que tu utilises correspond bien et, au besoin, je te laisse adapter la requête.
Xavier
Merci Xavier.
Je crois que ça va aller.
Pour l'instant, après un test d'exécution de ma requete tel que vous l'aviez modifié, j'ai le message d'erreur suivant :
"Conversion failed when converting datetime from character string"
J'ose croire que c'est parce que notre champ [Time] est au fait de type Char(14).En voici un enregistrement : 20100913121010. Ceci fait allusion au 13 septembre 2010, 12 heures, 10 minutes, 10 secondes.
Qu'en penses-tu?
Arthur.
Je crois que ça va aller.
Pour l'instant, après un test d'exécution de ma requete tel que vous l'aviez modifié, j'ai le message d'erreur suivant :
"Conversion failed when converting datetime from character string"
J'ose croire que c'est parce que notre champ [Time] est au fait de type Char(14).En voici un enregistrement : 20100913121010. Ceci fait allusion au 13 septembre 2010, 12 heures, 10 minutes, 10 secondes.
Qu'en penses-tu?
Arthur.
Encore grand merci Xavier.
Seulement que j'ai rencontré des problèmes avec la norme de semaines.
Avec
SET DATEFIRST 1;
j'ai su ramener le premier jour de la semaine à Lundi au lieu du Dimanche.
Voici ce qui me reste:
datepart (WW, '20100104')
me renvoie "2".
Pourtant je souhaiterais que la semaine du lundi 04 01 2010 soit la première de l'année afin que mes numérotations de semaines soient conservées.
Arthur.
Seulement que j'ai rencontré des problèmes avec la norme de semaines.
Avec
SET DATEFIRST 1;
j'ai su ramener le premier jour de la semaine à Lundi au lieu du Dimanche.
Voici ce qui me reste:
datepart (WW, '20100104')
me renvoie "2".
Pourtant je souhaiterais que la semaine du lundi 04 01 2010 soit la première de l'année afin que mes numérotations de semaines soient conservées.
Arthur.
salut xavier.
voici le contenu du fichier texte dénommé RESULTAT que produit le script bat:
"
HResult 0x2 Level 16 State 1
Named Pipes Provider: Could not open a connection to SQL Server [2].
"
prière de m'aider.
voici le contenu du fichier texte dénommé RESULTAT que produit le script bat:
"
HResult 0x2 Level 16 State 1
Named Pipes Provider: Could not open a connection to SQL Server [2].
"
prière de m'aider.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Il faut vérifier que les paramètres donnés correspondent bien à ton serveur sql :
sqlcmd -H hostname -U user -P password -d database -i fichier.sql > resultat.txt
En remplaçant :
hostname par l'IP ou le nom du serveur hébergeant ta base
user par le nom d'utilisateur pour s'y connecter
password par le mot de passe à utiliser
database par le nom de ta base de données
fichier.sql par le nom du fichier texte dans lequel tu as écrit ta requête.
Xavier
Il faut vérifier que les paramètres donnés correspondent bien à ton serveur sql :
sqlcmd -H hostname -U user -P password -d database -i fichier.sql > resultat.txt
En remplaçant :
hostname par l'IP ou le nom du serveur hébergeant ta base
user par le nom d'utilisateur pour s'y connecter
password par le mot de passe à utiliser
database par le nom de ta base de données
fichier.sql par le nom du fichier texte dans lequel tu as écrit ta requête.
Xavier
Ca vient de marcher. En remplaçant le H par le S.
Merci.
Du moins, le resultat (fichier text) en question semble ne pas etre requis afin d'etre importé dans une table.
En voici la structure:
date ProductID ServiceType ChargeMode
-------- -------------------- ----------- ----------
20100916 0100121800 0 4
20090916 0100113400 0 7
Alors que je m'attendai à avoir:
20100916 100121800 0 4
20090916 100113400 0 7
En plus après importation, toutes les colonnes s'entassent en une seule et les deux premières lignes s'érigent en enregistrements indésirables :
dateProductIDServiceTypeChargeMode
-------------------------------------
20100916010012180004
20090916010011340007
Merci.
Du moins, le resultat (fichier text) en question semble ne pas etre requis afin d'etre importé dans une table.
En voici la structure:
date ProductID ServiceType ChargeMode
-------- -------------------- ----------- ----------
20100916 0100121800 0 4
20090916 0100113400 0 7
Alors que je m'attendai à avoir:
20100916 100121800 0 4
20090916 100113400 0 7
En plus après importation, toutes les colonnes s'entassent en une seule et les deux premières lignes s'érigent en enregistrements indésirables :
dateProductIDServiceTypeChargeMode
-------------------------------------
20100916010012180004
20090916010011340007
N'y a-t-il pas moyen de renvoyer les résultats directement vers une table SQL SERVER spécifiée (*)?
sqlcmd -S ssss -U uuuu -P pppp -d dddd -i iiii.sql > (*)
sqlcmd -S ssss -U uuuu -P pppp -d dddd -i iiii.sql > (*)
Bonjour,
Si tu veux les renvoyer dans une table, c'est ta requête SQL qu'il faut changer, pas la ligne de commande, en utilisant la commande INTO, ou directement en faisant un INSERT.
Le INTO crée une nouvelle table, et plante si elle existe déjà (y a peut-être moyen d'écraser, je ne sais pas)
Le INSERT nécessite que la table soit créée au préalable.
Je te laisse lire la doc microsoft sur le sujet.
Xavier
Si tu veux les renvoyer dans une table, c'est ta requête SQL qu'il faut changer, pas la ligne de commande, en utilisant la commande INTO, ou directement en faisant un INSERT.
Le INTO crée une nouvelle table, et plante si elle existe déjà (y a peut-être moyen d'écraser, je ne sais pas)
Le INSERT nécessite que la table soit créée au préalable.
Je te laisse lire la doc microsoft sur le sujet.
Xavier
salut.
le problème c'est que la requete select dont il est question se fait from une table d'une base d'un serveur donné tandis que je veux renvoyer le resultat dans une table d'un autre serveur c'est à dire login et pswrd différents.
et alors, insert ou into ne marchent pas pour de transactions entre deux serveurs différents en ce que je sache.
thanks.
le problème c'est que la requete select dont il est question se fait from une table d'une base d'un serveur donné tandis que je veux renvoyer le resultat dans une table d'un autre serveur c'est à dire login et pswrd différents.
et alors, insert ou into ne marchent pas pour de transactions entre deux serveurs différents en ce que je sache.
thanks.