今天有一老同学问我一个用存储过程创建数据表的问题,这可把我问住了,我不会用sqlserver的存储过程创建数据表!就是oracle我也刚刚学会如何用动态sql创建数据表!我对sqlserver的存储过程本来就是一无所知啊!
请教了我的同事,也是不知道如何弄!晕,看我们这些程序员当的!
问了一前的一个客户,到现在还没有答复.哎!
只好硬着头皮搞了!
以下是错误的:
create procedure [dbo].[ctable]
@table_name varchar
as
create table [dbo].[@table_name] (
[id] [int] identity (1, 1) not null ,
[ww_name] [varchar] (200) collate chinese_prc_ci_as not null ,
[ww_category] [varchar] (100) collate chinese_prc_ci_as null ,
[ww_sum] [int] null ,
[ww_price] [money] null ,
[ww_sumprice] [money] null ,
[ww_operator] [varchar] (50) collate chinese_prc_ci_as null ,
[ww_jren] [varchar] (50) collate chinese_prc_ci_as null ,
[ww_jdepartment] [varchar] (100) collate chinese_prc_ci_as null ,
[ww_jmemo] [varchar] (500) collate chinese_prc_ci_as null ,
[ww_oitime] [datetime] null ,
[ww_memo] [text] collate chinese_prc_ci_as null
) on [primary] textimage_on [primary]
go exec ctable test
用上面的建的数据表名字就是 @table_name,太错了!
以下是正确的过程
create procedure [dbo].[ctable]
@table_name varchar(4)
as
begin
exec(
create table [dbo].[+@table_name+] (
[id] [int] identity (1, 1) not null ,
[ww_name] [varchar] (200) collate chinese_prc_ci_as not null ,
[ww_category] [varchar] (100) collate chinese_prc_ci_as null ,
[ww_sum] [int] null ,
[ww_price] [money] null ,
[ww_sumprice] [money] null ,
[ww_operator] [varchar] (50) collate chinese_prc_ci_as null ,
[ww_jren] [varchar] (50) collate chinese_prc_ci_as null ,
[ww_jdepartment] [varchar] (100) collate chinese_prc_ci_as null ,
[ww_jmemo] [varchar] (500) collate chinese_prc_ci_as null ,
[ww_oitime] [datetime] null ,
[ww_memo] [text] collate chinese_prc_ci_as null
) on [primary] textimage_on [primary] )
end
go
原来也是用字符串拼的啊!就像oracle里的一样(类似于oracle里的动态sql)