【问题标题】:Dynamic Name for Database Table - Stored Procedure数据库表的动态名称 - 存储过程
【发布时间】:2017-03-09 02:31:40
【问题描述】:

我想为我的数据库表创建动态名称。我声明变量并将其用作我的表名。

错误:“@sample”附近的语法不正确。期望 '.'、ID 或 QUOTED_ID

CREATE PROCEDURE [dbo].[sp_SAMPLE]
    @name nvarchar(50)
AS
BEGIN

SET NOCOUNT ON;

DECLARE @sample nvarchar(50);
SET @sample = 'tbl_function_' + @name;

Create Table @sample
(
    id int not null,
    UserType nvarchar(50) null,
    paramater2 nvarchar(50) null
)
END

有没有办法让我的表名动态化?谢谢。

【问题讨论】:

    标签: sql stored-procedures


    【解决方案1】:

    我不确定为什么你会想要这样做。但是,您可以使用动态 SQL 来完成:

    CREATE PROCEDURE [dbo].[sp_SAMPLE]
        @name nvarchar(50)
    AS
    BEGIN
        SET NOCOUNT ON;
    
        DECLARE @sql nvarchar(max);
    
        SET @sql = '
    Create Table tbl_function_@name
    (
        id int not null,
        UserType nvarchar(50) null,
        paramater2 nvarchar(50) null
    )';
    
        SET @sql = REPLACE(@sql, '@name', @name);
    
        EXEC sp_executesql @sql;
    END;
    

    为什么要为每个@name 创建一个单独的,而不是在列中插入带有@name 的行?

    【讨论】:

    • 谢谢它现在有效。还要感谢您将@name 列添加到我的表中的想法。
    【解决方案2】:
    CREATE PROCEDURE [dbo].[sp_SAMPLE]
    @name nvarchar(50)
    AS
    BEGIN
    SET NOCOUNT ON
    
    DECLARE @sql varchar(4000);
    
    SET @sql = '
    Create Table tbl_function_'+@name+'
    (
    id int not null,
    UserType nvarchar(50) null,
    paramater2 nvarchar(50) null
    )'
    
    EXEC (@sql) 
    END
    

    【讨论】:

    • 一些 cmets 会很好,否则它只是一个代码转储
    • @Ted 这是另一种获取结果而不是代码转储的方法
    猜你喜欢
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多