使用表名由“过程”派生的参数定义来创建表

我正在尝试运行一个创建表的过程,并且表名基于传递给该过程的参数。

这是程序,我已经创建了:

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

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

有没有可行的实现方案?

jeff2mac 回答:使用表名由“过程”派生的参数定义来创建表

动态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
,

或者,您可以使用已重命名的固定“模板表”

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,column3 int  
        );  

    END

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

    RETURN;
END
本文链接:https://www.f2er.com/2944011.html

大家都在问