Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Create Table avec nom de table en paramètre dans une SP

3 réponses
Avatar
Denis
Bonjour,

Je souhaiterais qu'une procédure stockée me crée une table dont le nom lui
est passé en paramètre.

Comment faire cela ??

Voici ce que j'ai écrit et qui ne fonctionne pas

CREATE PROCEDURE [sp_CREATEENV]

@nomfamille AS VARCHAR(50)

AS

DECLARE @nomTable1 AS VARCHAR(60)

SET @nomTable1 = @nomfamille+"_"+"_EDITIONS"

drop table @nomTable1

CREATE TABLE @nomTable1 (..........................................

Je me plante dès le Drop.


Une solution ?

Aloha, 2nis

3 réponses

Avatar
Fred BROUARD
Il faut utiliser du SQL dynamique

CREATE PROCEDURE P_CREATEENV @nomfamille AS VARCHAR(50)
-- évite le "sp_" minuscule.

AS

DECLARE @SQL NVARCHAR(4000)

SET @SQL = 'DROP TABLE ' + @nomfamille + '__EDITIONS'
EXEC (@SQL)

SET @SQL = 'CREATE TABLE ' + @nomfamille + '__EDITIONS ( .....'
EXEC (@SQL)


A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************

Je me plante dès le Drop.

Denis a écrit:
Bonjour,

Je souhaiterais qu'une procédure stockée me crée une table dont le nom lui
est passé en paramètre.

Comment faire cela ??

Voici ce que j'ai écrit et qui ne fonctionne pas

CREATE PROCEDURE [sp_CREATEENV]

@nomfamille AS VARCHAR(50)

AS

DECLARE @nomTable1 AS VARCHAR(60)

SET @nomTable1 = @nomfamille+"_"+"_EDITIONS"

drop table @nomTable1

CREATE TABLE @nomTable1 (..........................................

Je me plante dès le Drop.


Une solution ?

Aloha, 2nis


Avatar
Bouarroudj Mohamed
Denis,
Bien que je ne compend pas le besoin/la necessité de créer vos tables
dynamiquement, mais attention au problème de sécurité si vous exposez de
telle stored procedure, exécuter un paramètre passé a une SP avec un SQL
dynamique peut créer des grandes failles de sécurité.
A mon avis c'est pas la propre façon de créer une table dans SQL Server,
vous devez le faire par des scripts d'update ou si tu n'as pas autre choix
que de le faire dynamiquent ou a partir d'un client, l'utilisation de DMO
(SQL2000) ou SMO (SQL2005) est plus appropriée.


"Fred BROUARD" wrote in message
news:%
Il faut utiliser du SQL dynamique

CREATE PROCEDURE P_CREATEENV @nomfamille AS VARCHAR(50)
-- évite le "sp_" minuscule.

AS

DECLARE @SQL NVARCHAR(4000)

SET @SQL = 'DROP TABLE ' + @nomfamille + '__EDITIONS'
EXEC (@SQL)

SET @SQL = 'CREATE TABLE ' + @nomfamille + '__EDITIONS ( .....'
EXEC (@SQL)


A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************

Je me plante dès le Drop.

Denis a écrit:
Bonjour,

Je souhaiterais qu'une procédure stockée me crée une table dont le nom
lui est passé en paramètre.

Comment faire cela ??

Voici ce que j'ai écrit et qui ne fonctionne pas

CREATE PROCEDURE [sp_CREATEENV] @nomfamille AS VARCHAR(50)

AS

DECLARE @nomTable1 AS VARCHAR(60)

SET @nomTable1 = @nomfamille+"_"+"_EDITIONS"

drop table @nomTable1

CREATE TABLE @nomTable1 (..........................................

Je me plante dès le Drop.


Une solution ?

Aloha, 2nis






Avatar
Denis
Merci à vous pour votre aide

Aloha, 2nis

"Bouarroudj Mohamed" wrote:

Denis,
Bien que je ne compend pas le besoin/la necessité de créer vos tables
dynamiquement, mais attention au problème de sécurité si vous exposez de
telle stored procedure, exécuter un paramètre passé a une SP avec un SQL
dynamique peut créer des grandes failles de sécurité.
A mon avis c'est pas la propre façon de créer une table dans SQL Server,
vous devez le faire par des scripts d'update ou si tu n'as pas autre choix
que de le faire dynamiquent ou a partir d'un client, l'utilisation de DMO
(SQL2000) ou SMO (SQL2005) est plus appropriée.


"Fred BROUARD" wrote in message
news:%
> Il faut utiliser du SQL dynamique
>
> CREATE PROCEDURE P_CREATEENV @nomfamille AS VARCHAR(50)
> -- évite le "sp_" minuscule.
>
> AS
>
> DECLARE @SQL NVARCHAR(4000)
>
> SET @SQL = 'DROP TABLE ' + @nomfamille + '__EDITIONS'
> EXEC (@SQL)
>
> SET @SQL = 'CREATE TABLE ' + @nomfamille + '__EDITIONS ( .....'
> EXEC (@SQL)
>
>
> A +
>
> --
> Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
> Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
> Audit, conseil, expertise, formation, modélisation, tuning, optimisation
> ********************* http://www.datasapiens.com ***********************
>
> Je me plante dès le Drop.
>
> Denis a écrit:
>> Bonjour,
>>
>> Je souhaiterais qu'une procédure stockée me crée une table dont le nom
>> lui est passé en paramètre.
>>
>> Comment faire cela ??
>>
>> Voici ce que j'ai écrit et qui ne fonctionne pas
>>
>> CREATE PROCEDURE [sp_CREATEENV] @nomfamille AS VARCHAR(50)
>>
>> AS
>>
>> DECLARE @nomTable1 AS VARCHAR(60)
>>
>> SET @nomTable1 = @nomfamille+"_"+"_EDITIONS"
>>
>> drop table @nomTable1
>>
>> CREATE TABLE @nomTable1 (..........................................
>>
>> Je me plante dès le Drop.
>>
>>
>> Une solution ?
>>
>> Aloha, 2nis
>
>