我有一张桌子
Table_1 (
id int,
tablename varchar(max),
createdDate datetime
)
现在让我们假设有20行id
1-20。因此tablename
包含20个不同的名称(name1,name2,...,name20)。现在这些名称在同一个数据库中有自己的n
行表。
表名的格式:
name1(
slno int,
data varchar(100),
createdby int,
processeddate datetime
)
name2(
slno int,
data varchar(100),
createdby int,
processeddate datetime
)
...
name20(
slno int,
data varchar(100),
createdby int,
processeddate datetime
)
现在我创建了
temp_table(
ID int,
tablename varchar(max),
createdby int,
createdDate datetime
)
将存储来自相应tablename
帮助我开发一个填充temp_table
的查询。
答案 0 :(得分:2)
更新如何让您的疯狂数据看起来更好
首先阅读我的评论
您可以使用下面的查询使您的数据看起来像设计良好的表格(然后使用它来迁移到干净的设计):
SELECT 1 as dataid, 'name1' as name, s1no, data, createdby, processdate FROM name1
UNION ALL
SELECT 2 as dataid, 'name2' as name, s1no, data, createdby, processdate FROM name2
UNION ALL
SELECT 3 as dataid, 'name3' as name, s1no, data, createdby, processdate FROM name3
UNION ALL
-- etc
UNION ALL
SELECT 20 as dataid, 'name20' as name, s1no, data, createdby, processdate FROM name20
这可能应该是一个评论,但在评论区域内没有表达的余地。
您的数据模型存在缺陷。不应该有1-N表。应该有一列代表这些信息 - 当人们第一次开始使用关系数据时,这是一个常见的错误。
以下是我如何设置它:
表格表格
dataid int, -- this is the same as the 1-20
name varchar(max), -- you probably don't need this since you have an ID
slno int,
data varchar(100),
createdby int,
processeddate datetime
因此,使用此表格,您可以选择dataid = x
以获得与在设计中选择特定表格相同的结果。我建议在此列中添加一个索引(因为每个选择都会使用它。)
现在我们有了更好的设计。我还不清楚你要求设计的查询。
例如,要查看创建它们时存在的“表格”列表以及它们拥有的行数,您只需执行此操作:
SELECT dataid as tableid,
min(name) as name,
min(processdate) as createdate,
max(processdate) as lastaccess,
count(*) as numberrecords
FROM tablestable
GROUP BY dataid
答案 1 :(得分:0)
感谢每一位给我这么重要时刻的人。 经过长时间的耐心,我解决了这个问题。
对于此问题,需要SQL动态查询。 怎么样,我要解释......
While ((Select Count(*) From Table_1) > 0 )
Begin
Declare @ID int = (Select top 1 ID From Table_1),
@tableName varchar(max) = (select TableName From Table_1 where id = @id),
@CreatedDate DateTime = (select CreatedDate From Table_1 Where id = @id),
@Createdby int,
@Data int,
@query1 varhcar(max)
set @query1 = '
Select @Createdby = (select top 1 createdby From +'@tableName'+ ),
@Data = (Select Count(data) From +'@tableName'+ )
'
declare @query2 varchar(100)
set @query2 = '@Createdby output,@Data output'
exec sp_executesql @query1,
@query2,
@Createdby = @Createdby output,
@Data = @Data output
insert into Temp_table
Values(@ID,@TableName,@Createdby,@createddate)
Delete From Table_1 where id = @id
end
Select * from Temp_table