注册 登录
编程论坛 SQL Server论坛

[求助]建立的表名中,能否用变量

lhj2005 发布于 2007-03-19 18:51, 1334 次点击
如何把变量加到表名中

请高手指导

[此贴子已经被作者于2007-3-19 21:47:10编辑过]

12 回复
#2
lhj20052007-03-19 20:01

declare @i int
set @i=1
while @1<10
begin
create table a@1(
myid int not null,
myname varchar(10),
myadress varchar(50))
set @i=@i+1
end

可以这样吗?

#3
bygg2007-03-20 08:52
不可以的.
#4
Kendy1234562007-03-20 17:47
用循环重复写建表语句 再提交是可以的

比如
set @i =1
while @i<10
begin
set @sql = 'Create table tbl'+@i +' (myid int not null,my name varchar(10) )'
exec (@sql)
set @i =@i+1
end
#5
bygg2007-03-20 21:53
我晕..加进去后是变量了??
#6
棉花糖ONE2007-03-20 22:07
sql中字符型默认是会转换成数字型的,
declare @sql varchar(8000)
declare @i int
select @i =1
while @i<10
begin
set @sql = 'Create table tbl'+cast(@i as varchar) +' (myid int not null,myname varchar(10) )'
print @sql
exec(@sql)
set @i =@i+1
end
#7
lhj20052007-03-20 22:34
set @i =1
while @i<10
begin
set @sql = 'Create table tbl'+@i +' (myid int not null,my name varchar(10) )'
exec (@sql)
set @i =@i+1
end
把@sql声明为varchar(20)为什么会出现:
将 varchar 值 'Create table tbl' 转换为数据类型为 int 的列时发生语法错误。


exec (@sql),这个语句是执行变量的吗?能否解释下

为什么要把@i的数据类型变成字符型?

[此贴子已经被作者于2007-3-20 23:06:29编辑过]

#8
棉花糖ONE2007-03-20 23:16
sql中字符型默认是会转换成数字型的,
declare @sql varchar(8000)
declare @i int
select @i =1
while @i<10
begin
set @sql = 'Create table tbl'+cast(@i as varchar) +' (myid int not null,myname varchar(10) )'
print @sql
exec(@sql)
set @i =@i+1
end 我不是给改了吗
#9
lhj20052007-03-20 23:23

不好意思!还是有点不理解
想提两个问题

1)exec (@sql),这个语句是执行变量的吗?能否解释下
exec(@sql)执行这个语句,等同于直接执行Create table tbl语句吗

2)cast(@i as varchar)
为什么要把@i的数据类型转换成字符型?

#10
棉花糖ONE2007-03-20 23:34
1.exec是用来执行动态sql语句或存储过程,动态语句的优势在于灵活
2.我前面说过sql server中字符串会默认转换成数字,如果不把数字
强制转换为字符串,在发生字符转数字的时候就会出现错误,因为那
里面的字符包含非数字的.
#11
lhj20052007-03-21 00:13
1)我把@sql变量设置成varchar(50)后
print(@sql) Create table tbl1 (myid int not null,myname varcha只能出现这50个字段了,

set @sql='Create table tbl'+cast(@i as varchar) +' (myid int not null,myname varchar(10) )'
打''号的字段好象不应该算在varchar(50)里的吗?


2)当cast(@i as varchar) 把@i的数据类型转换成字符型后,
set @i=@i+1 是字符的@i+1怎么计算的啊?
#12
棉花糖ONE2007-03-21 00:18
1.''这个是字符的标志啊
2.cast(@i as varchar) 这个只是显示的方式改变了,@i还是整数啊
#13
lhj20052007-03-21 00:35

字符也包含数字的吧
这个时候的@i是字符的数字,是不是因为这样也可以运算


EXEC(@sql)相当于
执行Create table tbl1 (myid int not null,myname varchar(10)),吗

1