变量中的变量问题

coffeewar 2004-06-22 02:27:51
想动态的创建表,其中表的表名,字段名,字段类型,长度都是通过变量传进来的(创建的表最多有12个字段,实际字段数由 @length 变量传进来)
--@tableName 表名
--@length 表的字段数
--@Name1 第一个字段名
--@keyType1 第一个字段类型
--@keySize1 第一个字段长度
--@Name2,NameX 以此类推
create procedure addDepartment
(@tableName varchar(50),
@length tinyint, --字段数
@Name1 varchar(20)=null,@keyType1 tinyint=null,@keySize1 tinyint=null,
@Name2 varchar(20)=null,@keyType2 tinyint=null,@keySize2 tinyint=null,
@Name3 varchar(20)=null,@keyType3 tinyint=null,@keySize3 tinyint=null,
. --最多有12 个
.
.
.
.
.
)
declare @createTabStr varchar(8000)
select @createTabStr='create table'+@tableName

--以下语句在Sql中是有错误的,怎样才能实现类似的功能?

declare @i int
set @i=1
while @i<length
begin
select @createTabStr=@createTabStr+'('+@Name+@i --以下省略,问题就出在 @Name +@i 怎么样才能代表 @Name1或@ Name2呢。)
.
.
.
.
.
@i=@i+1
end

exec(@createTabStr)

好像 Sql没有这种功能啊,在 c# 里面是很容易实现的,Sql里又没有数组,郁闷。



...全文
115 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
coffeewar 2004-06-22
  • 打赏
  • 举报
回复
谢谢,我还是一句句写好了。
zarge 2004-06-22
  • 打赏
  • 举报
回复
可以用临时表或者表变量

declare @tbl table( id int, name varchar(20), keytype tinyint, keysize tinyint )

insert into @tb1
select 1, @name1, @keytype1, @keysize1
union
select 2, @name2, @keytype2, @keysize2
union
...
union
select 12, @name12, @keytype12, @keysize12

declare @createTabStr varchar(8000)
select @createTabStr='create table ' + @tableName + '( '

select @createTabStr = @createTabStr + Name + Case keytype when 1 then 'int', when 2 then 'varchar(' + cast( keysize as varchar ) + ')' else '' end + ', '
from @tbl
order by id

set @createTabStr = LEFT( @createTabStr, LEN(@createTabStr) - 2 ) + ')'

exec(@createTabStr)
coffeewar 2004-06-22
  • 打赏
  • 举报
回复
老大,只能这样了吗?
zjcxc 元老 2004-06-22
  • 打赏
  • 举报
回复
反正只有12个,你逐个写出来嘛
zjcxc 元老 2004-06-22
  • 打赏
  • 举报
回复
sql中没有这样的功能,关键是SQL不支持数组

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧