我有一个表,我想用这个行名创建新表,所以每一行都是不同的表。
首先,我选择了我需要的数据并放入我的表格
declare @cDeviceID nvarchar(max)
declare @cAllin nvarchar(max)
set @cAllin = ''
create table d14 (Techem_Device varchar(max))
declare DeviceID cursor dynamic
for
select DeviceID from DEVICES where Manufacture='Socomec'
open DeviceID
fetch first from DeviceID into @cDeviceID
while @@FETCH_STATUS = 0
begin
set @cAllin = 'T' + @cDeviceID
insert into D14 select @cAllin
fetch next from DeviceID into @cDeviceID
END
Close DeviceID
deallocate DeviceID
之后我尝试创建查询:
exec ('create table' + @cAllin + '(Datum datetime, Device_0, Device_1)')
但是这创建了错误消息:
未知对象类型' tableT25882'用于CREATE,DROP或ALTER 言。
有人能指出我正确的方向吗?
答案 0 :(得分:0)
此处table
关键字和表名之间错过了空格:
exec ('create table' + @cAllin + '(Datum datetime, Device_0, Device_1)')
当表名将被保留为关键字时,最好将表名包装成方括号:
exec ('create table [' + @cAllin + '] (Datum datetime, Device_0, Device_1)')
另请注意,您尚未指定Device_0, Device_1
列的列类型。
答案 1 :(得分:0)
正如安迪回答中提到的那样错过了,但我想向你提出另一个解决方案。你可以避免CURSOR
使用它:
SELECT 'CREATE TABLE [' + DeviceID + '] (Datum DATETIME, Device_0, Device_1)
GO
'
FROM DEVICES
WHERE Manufacture='Socomec'
在SSMS中使用结果到文本选项。它生成脚本,允许您根据DEVICES表值创建表。
请记住为所有列指定数据类型。