Bonjour
Comme le titre l'indique je suis à la recherche d'un outil qui permet de générer des procédures stockées qui permettent de faire l'ajout l'update et la suppression des tables d'une base de données sql server.
Merci d'avance
Bonjour
Comme le titre l'indique je suis à la recherche d'un outil qui permet de générer des procédures stockées qui permettent de faire l'ajout l'update et la suppression des tables d'une base de données sql server.
Merci d'avance
Cherche plutôt un développeur T-sql...
C'est quoi ton besoin précis?
Tu cherches à apprendre le sql ou c'est un besoin vraiment spécifique?
Bonjour,
Vous pouvez faire cela en écrivant une procédure stockée utilisant du code SQL dynamique.
Vous devez pour cela récupérer le nom des colonnes et leur type en utilisant les vues système sys.tables, sys.columns et sys.types si vous êtes sous SQL Server 2005 ou ultérieur
@++![]()
Elsuket
A+
Etienne ZINZINDOHOUE
Billets-Articles
Merci Zinzinetti mais la requête qui est dans ce billet ne génère qu'un partie de l'INSERT.
Je viens d'écrire le code pour générer le script d'une procédure stockée d'INSERT :
Il suffit de l'encapsuler dans une procédure stockée et de la marquer comme objet système, comme tu le suggères
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 DECLARE @table_name sysname = 'maTable' , @cr char(2) = CHAR(13) + CHAR(10) , @tab char(1) = CHAR(9) , @parameters varchar(max) , @parameters_and_types varchar(max) , @sql varchar(max) SELECT @sql = CASE WHEN @sql IS NULL THEN @tab + 'INSERT' + @tab + @table_name + @cr + @tab + '(' + @cr + @tab + @tab + C.name ELSE @sql + @cr + @tab + @tab + ', ' + C.name END FROM sys.columns AS C INNER JOIN sys.tables AS T ON C.object_id = T.object_id WHERE T.name = @table_name AND C.is_computed = 0 ORDER BY C.column_id SELECT @parameters_and_types = CASE WHEN @parameters_and_types IS NULL THEN '' + @tab ELSE @parameters_and_types + @tab + ', ' END + '@_' + C.name + ' ' + TY.name + CASE WHEN TY.name IN ('char', 'varchar') THEN '(' + CASE C.max_length WHEN -1 THEN 'max' ELSE CAST(C.max_length AS varchar(5)) END + ')' WHEN TY.name IN ('nchar', 'nvarchar') THEN '(' + CASE C.max_length WHEN -1 THEN 'max' ELSE CAST(C.max_length / 2 AS varchar(5)) END + ')' WHEN TY.name IN ('float', 'numeric', 'decimal', 'real') THEN '(' + CAST(C.precision AS varchar(3)) + ',' + CAST(C.scale AS varchar(3)) + ')' WHEN TY.name IN ('datetime2', 'datetimeoffset', 'time') THEN '(' + CAST(C.scale AS varchar(3)) + ')' ELSE '' END + CASE WHEN C.is_nullable = 1 THEN ' = NULL' ELSE '' END + @cr , @parameters = CASE WHEN @parameters IS NULL THEN @cr + @tab + 'SELECT' + @tab ELSE @parameters + @cr + @tab + @tab + ', ' END + '@_' + C.name + ' ' FROM sys.tables AS T INNER JOIN sys.columns AS C ON T.object_id = C.object_id INNER JOIN sys.types AS TY ON TY.user_type_id = C.system_type_id WHERE T.name = @table_name SET @sql = @sql + @cr + @tab + ')' SET @sql = 'CREATE PROCEDURE ps_INSERT_' + @table_name + @cr + @parameters_and_types + 'AS' +@cr + 'BEGIN' + @cr + @tab + 'SET NOCOUNT ON' + @cr + @cr + @sql + @parameters SET @sql = @sql + @cr + 'END' PRINT @sql
Les autres instructions de type CRUD vont suivre dans un billet.
Enjoy !
@++![]()
Ton code ne fonctionnera pas si la collation du serveur ou de la base est CS. En effet le véritable nom des tables/vues systèmes est toujours en minuscule (exemple sys.tables et non sys.TABLES).
A +
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
Merci pour vos réponses
"7gyY9w1ZY6ySRgPeaefZ" je prendrai ta réponse comme une très mauvaise blague.
Effectivement j'avais pensé a la procédure stockée mais je n'avais pas de point de part ce que vous venez de m'offrir je vais donc regarder ca tranquillement.
Héhé je sais SQLPro, mais ce n'est pas moi : c'est le formateur de code du site qui l'a mis en majuscules
Y'a-t-il moyen de forcer la mise en minuscules ?
@++![]()
Erreur récurrente déjà maintes fois signalée. Poste dans les forums interne une demande !
A +
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
Entre guillemets ça à l'air de fonctionner :
Code : Sélectionner tout - Visualiser dans une fenêtre à part select * from sys."tables"
Partager