2017-03-09 52 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

相關問題