在嘗試做在線考試系統的過程中,為了管理每個學生的考試信息,就考慮為每個學生創建以學號命名的臨時數據表。
在存儲過程中動態創建表如果不使用參數的話很好創建。方法如下:
ALTER procedure [dbo].[ZXKS_GETSCORE]
AS
begin transaction
--創建臨時表,直接命名
create table temp_tablename
(
id int primary key,
da varchar(300),
fs int
)
declare @count int
select @count=@@error
if(@count=0)
commit transaction
else
rollback transaction
如果要將傳入參數作為數據表名的話,就會遇到一個問題:如果表名是數字那麼SQL SERVER 2005認不出來,會提示錯誤。必須將數字的表名前加上非數字的字符。存儲過程如下所示:
/*
createtable '123456'
*/
alter procedure createtable
@xuehao varchar(20)
as
declare @tablename varchar(20)
set @tablename='temp'+@xuehao
exec('Create Table '+@tablename+'
( name nvarchar(15),
address nvarchar(50)
)')
並且將參數作為數據表名的話,創建方法要使用exec方法,使用前面介紹的那個方法行不通。