Les variables sont-elles stockées dans la base dans MS SQL Server ?

Les variables sont-elles stockées dans la base dans MS SQL Server ? - SQL/NoSQL - Programmation

Marsh Posté le 30-10-2007 à 21:04:30    

Bonjour,
 
J'ai une question simple à laquelle je n'ai pas trouvé de réponse en regardant rapidement sur le web: en SQL Server, les variables créées par un utilisateur sont-elles des objets de la table (accessibles par les autres utilisateurs) ou bien est-ce que ce sont des objets temporaires propres à l'utilisateur (comme un variable d'environnement sous DOS)? Je pose la question parce qu'en essayant de créer une procédure, j'ai eu l'erreur "Autorisation CREATE PROCEDURE refusée", ce qui me fait penser que les variables et les procédures sont des objets de la base de données qu'on ne doit pas créer, pour son usage personnel, si on ne veut pas polluer la base (j'ai des besoins simples, par exemple stocker un nombre dans une variable ou constante qui sera utilisée dans plusieurs requêtes, ou stocker le résultat d'une requête dans une variable; je n'ai pas besoin de partager ces variables/constantes avec d'autres utilisateurs).
 
Merci.

Reply

Marsh Posté le 30-10-2007 à 21:04:30   

Reply

Marsh Posté le 31-10-2007 à 14:35:06    

ouhla...
 
je crois qu'on part de très loin, je sais pas par où commencer :D
 
en gros.
 
imagine qu'une base de données, c'est comme un dossier utilisateur sous Windows.
=> Chaque table, procédure, etc. sont des fichiers. avec des autorisations, tu peux donner des droits à différents utilisateurs pour certaines actions spécifiques sur ces fichiers.
=> les données à l'intérieur des table sont accessibles à tout ceux qui ont accès à la table.
 
lorsque tu crées un objet dans une base de données, il est associé à ton login. selon les paramètres de ton rôle, il est alors accssible aux autres utilisateurs ou non. mais là ça commence à devenir plus compliqué, et vu que j'utilise jamais 36 utilisateurs, j'ai jamais trop creuse : un compte dbo pour faire de l'administration, et un compte guest pour la consultation, basta.
 
 
pour répondre à tes besoins par contre euh...
je vois pas trop ce que tu veux faire avec une base.
c'est pas fait pour stocker des variables, mais des données. c'est pas pareil.
 
explique quel est ton besoin réel, histoire qu'on sâche déjà si t'as besoin de sql server pour y répondre ou non. là c'est pas clair.


Message édité par MagicBuzz le 31-10-2007 à 14:36:33
Reply

Marsh Posté le 31-10-2007 à 19:38:59    

Je suis depuis peu utilisateur d'une base SQLServer qui existe depuis longtemps et qui a de nombreux utilisateurs. Mes besoins (pour l'instant) se limitent, par exemple, à faire (dans une même fenêtre de Management Studio) plusieurs fois une série de requêtes dont certaines contiennent "and numeroEmploye=12345", sachant que la valeur de numeroEmploye varie d'une exécution à l'autre: plutôt que d'avoir à modifier plusieurs occurrences de numeroEmploye chaque fois que je m'intéresse à un employé différent, je voudrais affecter avant les requête une variable avec un nom comme employeCourant (et rempalcer les and numeroEmploye=12345 par des and numeroEmploye=employeCourant), pour moins me fatiguer, pour avoir un code plus lisible et pour diminuer le risque d'erreur dû à la saisie multiple d'un code cabalistique. Ma question, c'est de savoir si ces variables/constantes resteront chez moi, ou si elles tomberont dans l'architecture de la base comme un cheveu dans la soupe du DBA.


Message édité par Apokrif le 31-10-2007 à 19:40:07
Reply

Marsh Posté le 31-10-2007 à 19:57:00    

OK. Donc une variable déclarée avec l'instruction DECLARE est :
- Liée à ta session, et uniquement ta session
- Sa portée ne dépasse as le bloc BEGIN - END dans lequel elle se trouve.
 

Code :
  1. declare @toto AS varchar(50);
  2. SET @toto = 'plop';
  3.  
  4. begin
  5.  declare @titi AS varchar(50);
  6.  SET @titi = 'coin';
  7. end;
  8.  
  9. SELECT @toto; --> "plop"
  10. SELECT @titi; --> boum


 
Si tu ouvres en même temps une autre session avec le même utilisateur, alors tu ne peux pas accéder à ces variables, mais tu peux tout à fait en déclarer de nouvelles du même nom, ça n'impactera absolument pas la première session.


Message édité par MagicBuzz le 31-10-2007 à 19:57:25
Reply

Marsh Posté le 02-11-2007 à 13:07:10    

Merci pour la réponse. J'ai l'impression qu'il n'y a pas de possibilité d'avoir en SQLServer des procédures/macro qui (comme les variables) seraient stockées uniquement dans l'espace de travail de l'utilisateur et pas dans la base (il faut utiliser un langage hôte) ?

Reply

Marsh Posté le 02-11-2007 à 14:21:45    

De quoi tu parles ?
 
Les "variables", ne sont pas stockées.
 
declare @toto;
=> C'est une variable. Rien n'est écrit dans la base.
 
J'ai l'impression que tu mélanges un peu tout en fait.
 
Sinon, effectivement, tout le code T-SQL que tu vas écrire :
1/ Tourne sur le SERVEUR et non sur la station cliente
2/ N'accède à rien d'autre que les éléments de la base de données
 
Donc effectivement, selon ce que tu veux faire, tu vas avoir besoin d'un langage "hôte" afin d'écrire une application cliente.

Reply

Marsh Posté le 04-11-2007 à 21:09:13    

je confirme que les variables déclarée dans les bloc TSQL sont propres à la session et ne seront effective que jusqu'a ce que la session de l'utilisateur/de la connexion sera fermée.  
 
Après ce que dit MagicBuzz est tout à fait correct. Il ne faut pas mélanger les pommes et les poires.  
Je pense qu'il serait nécessaire de se renseigner un peu mieux sur les SGBD et leur fonctionnement avant de démarrer n'importe quel développement d'une application ;-)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed