2013-11-25 5 views
-1

У меня есть таблицаприсоединяется таблица с несколькими таблицами

Table_1 (
    id int, 
    tablename varchar(max), 
    createdDate datetime 
) 

Теперь давайте предположим, что есть 20 строк с id 1-20. Следовательно, tablename содержит 20 разных имен (name1, name2, ..., name20). Теперь эти имена имеют свои собственные таблицы с n строк в той же базе данных.

Формат tablenames:

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 
) 

, который будет хранить ID, имя_таблицы, createddate и CreatedBy из соответствующего tablename

Помогите мне разработать запрос на заполните temp_table.

+4

Ваш дизайн ужасен - у вас большие проблемы. – Hogan

+0

Спасибо Octoshape, чтобы спроектировать мой запрос в отличном виде –

ответ

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 
+0

Парни, пожалуйста, проголосуйте за меня, потому что я столкнулся с проблемой ответа на вопрос с моей учетной записью stackoverflow !! –

2

ОБНОВЛЕНИЕ КАК СДЕЛАТЬ СВОЙ CRAZY ДАННЫЕ LOOK ХОРОШО

читать мои комментарии ниже первого

Вы можете сделать данные выглядят хорошо спланированной таблицы с ниже запроса (а затем использовать это перейти на чистый дизайн):

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 

Это, вероятно, S это комментарий, но в области комментариев просто нет места для выражения.

Ваша модель данных неверна. Не должно быть 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 
+0

+1 Kudos для ваших усилий. И извините за напыщенную речь в комментариях выше: D – Octoshape

+0

@ Хоган извините, но это не полезно! –

+0

@MindHunter Извините, но я не могу помочь, если вы не скажете мне почему? У вас уже есть таблицы, как вы описываете? Я могу дать вам запрос, чтобы превратить их в эту таблицу. – Hogan

Смежные вопросы