数据库表的动态名称 - 存储过程

时间:2017-03-09 02:31:40

标签: sql stored-procedures

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

错误:' @ 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

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

2 个答案:

答案 0 :(得分:2)

我不确定为什么你想要这样做。但是,您可以使用动态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行?

答案 1 :(得分:0)

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