2017-03-09 61 views
0

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

错误:“@sample”附近的语法不正确。期待“”,身份证或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

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

CREATE PROCEDURE [dbo].[sp_SAMPLE] 
    @name nvarchar(50) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    DECLARE @sql nvarchar(max); 

    SET @sql = ' 
Create Table [email protected] 
(
    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行?

+0

谢谢你现在的作品。另外感谢你的想法添加列@name到我的表。 – EnzoZow

0
CREATE PROCEDURE [dbo].[sp_SAMPLE] 
@name nvarchar(50) 
AS 
BEGIN 
SET NOCOUNT ON 

DECLARE @sql varchar(4000); 

SET @sql = ' 
Create Table tbl_function_'[email protected]+' 
(
id int not null, 
UserType nvarchar(50) null, 
paramater2 nvarchar(50) null 
)' 

EXEC (@sql) 
END 
+0

一些评论会很好,否则它只是一个代码转储 – Ted

+0

@Ted这是另一种获得结果而不是代码转储的方式 –

+0

不,它只是一个代码转储 – Ted