怎样创建多个数据类型一样的表

要创建多个(几百个)每列数据类型都相同的数据表,有没有一个语句可以在一个库中直接生成,而不需要每个表都手动创建?我用代码
use test1;
declare @circlecount int,@count int;
set @circlecount=10
set @count=0;
while(@count<@circlecount)
begin
create table ** test@count**
set @count=@count+1
end
提示有错,是因为每个库中的数据表不能重名,数据库中又没有数组,不知道该怎么解决?

0

5个回答

直接表结构做复制就可以了。

1
qiYanTing
qiYanTing 当时也想用这个来做,但是一共要建几百张表,这样的话还是要写几百条语句,所以想用动态语句的方法生成
一年多之前 回复

要批量执行动态SQL

0
qiYanTing
qiYanTing 因为刚接触sqlserver,不是很明白动态SQL的语法,能说得详细一点或是推荐一本书吗?非常感谢
一年多之前 回复

大神,可以贴出来一些代码,或者说得更具体一点吗?比如说什么是动态SQL,批量执行SQL?

0

exec就能执行

DECLARE @TableName VARCHAR(50),@Sql NVARCHAR (MAX),@OrderID INT;
SET @TableName = 'Orders';
SET @OrderID = 10251;
SET @sql =
    'SELECT * FROM '+QUOTENAME(@TableName) +'WHERE OrderID = '+
    CAST(@OrderID AS VARCHAR(10))+' ORDER BY ORDERID DESC'
EXEC(@sql);

0
zml_moxueli
呓语的风 回复qiYanTing: 那些都是禁止编码问题的,不用考虑,直接按你写的也行
一年多之前 回复
qiYanTing
qiYanTing 非常感谢大神耐心细致的解答,不过作为小白的我还有几个问题想请教: 这些代码的作用是将表Orders里的OrderID列=10251中的一行取出来 问题一:QUOTENAME的作用是以分隔符连接字符串,在这里只有一个表名,为什么要用QUOTENAME呢? 问题二:既然是选出一行数据,为什么最后要用排列 问题三:既然是选出一行数据,为什么不用静态语句 SELECT * FROM Orders where OrderID = 10251
一年多之前 回复

针对要建10个表test0,test2,......,test9,我用动态语句建立,
declare @querystring nvarchar(4000)
declare @paramstring nvarchar(200)
declare @input_i int
declare @input_count int
set @querystring='while(@i<@count)
begin
create table '+STUFF('test',4,0,'+cast(@i as varchar(20))+')+'
@i=@i+1
end'
set @paramstring='@i int,@count int'
set @input_i=0
set @input_count=10
exec sp_executesql @querystring,@paramstring,@i=@input_i,@count=@input_count
但是提示:消息 102,级别 15,状态 1,第 3 行
'+' 附近有语法错误。
还请大神解答一二

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!