Создание таблицы с именем таблицы, определяемым параметром, выведенным в процедуру - PullRequest
1 голос
/ 11 декабря 2019

Я пытаюсь запустить процедуру, которая создает таблицу, а имя таблицы основано на параметре, переданном в процедуру.

Вот процедура, которую я уже создал:

Create PROCEDURE [dbo].[Creating_Table]
@number varchar(8)
AS

CREATE TABLE CONCAT(table_name,@number) (
column1 int,
column2 int,
column3 int  
    );
GO

Есть ли рабочая реализация для этого?

Ответы [ 2 ]

3 голосов
/ 11 декабря 2019

Динамический SQL поможет вам.

Создание таблиц Динамически будет рискованно.

Create PROCEDURE [dbo].[Creating_Table]
@number varchar(8)
AS
BEGIN
    DECLARE @Query VARCHAR(1000),@TableName VARCHAR(100)
    SELECT @TableName = 'Table_'+ @number
    SELECT @Query = '

    CREATE TABLE '+@TableName+' (
        column1 int,
        column2 int,
        column3 int  
     );'

    EXEC (@Query)
END
0 голосов
/ 11 декабря 2019

альтернативно, вы можете использовать фиксированную "таблицу шаблонов", которая переименовывается в

CREATE PROCEDURE [dbo].[Creating_Table] @number VARCHAR(8)
AS
BEGIN
    SET NOCOUNT ON;

    IF @number IS NULL
    BEGIN
        RETURN;
    END

    DECLARE @tablename NVARCHAR(128) = 'table_name' + @number;


    --table already exists, return
    IF OBJECT_ID('dbo.' + @tablename) IS NOT NULL
    BEGIN
        RETURN;
    END

    --if template does not exist, create it
    IF OBJECT_ID('dbo.template_table') IS NULL
    BEGIN
        CREATE TABLE dbo.template_table
        (
            column1 int,
            column2 int,
            column3 int  
        );  

    END

    --rename template
    EXEC sp_rename 'dbo.template_table', @tablename, N'OBJECT';

    RETURN;
END
...