当前位置: 代码迷 >> Sql Server >> 在存储过程中创建表,该如何解决
  详细解决方案

在存储过程中创建表,该如何解决

热度:39   发布时间:2016-04-27 19:01:18.0
在存储过程中创建表
我要再存储过程中创建表,但是表名是个变量,如:
CREATE   PROCEDURE     TableCreate

@ID   int

AS

Declare   @TableName   varchar(50)

set   @TableName   =   'Table '   +   Convert(varchar(50),@ID)

create   table   @TableName     (   tableName   varchar(20)   not   null   )

但是SQL   不允许表名是变量,我该如何处理?

------解决方案--------------------

CREATE PROCEDURE TableCreate

@ID int

AS

Declare @TableName varchar(50)

set @TableName = 'Table ' + Convert(varchar(50),@ID)

exec( 'create table '[email protected]+ ' ( tableName varchar(20) not null ) ')
------解决方案--------------------
CREATE PROCEDURE TableCreate
@ID int
AS
Declare @TableName varchar(50),@sql varchar(8000)
set @TableName = 'Table ' + Convert(varchar(50),@ID)
set @sql= 'create table '[email protected]+ '( tableName varchar(20) not null ) '
exec(@sql)

------解决方案--------------------

CREATE PROCEDURE TableCreate

@ID int

AS

Declare @SQL varchar(5000)
set @SQL= 'create table Table '+rtrim(@id)+ ' ( tableName varchar(20) not null ) '
exec(@SQL)

------解决方案--------------------
CREATE PROCEDURE TableCreate

@ID int

AS

Declare @SQL varchar(5000)
set @SQL= 'create table Table '+rtrim(cast(@id as varchar(100))+ ' ( tableName varchar(20) not null ) '
exec(@SQL)
------解决方案--------------------
要用到动态SQL创建.
alter PROCEDURE TableCreate

@ID int

AS

Declare @TableName varchar(50)
declare @sql varchar(8000)
/*
set @TableName = 'Table ' + Convert(varchar(50),@ID)

create table @TableName ( tableName varchar(20) not null )
*/
set @sql= 'create table Table '+rtrim(@ID)+ '( tableName varchar(20) not null ) '
exec(@sql)

exec TableCreate '123 '
  相关解决方案