Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> взятие таблицы по имени 
:(
    Опции темы
Cleric
Дата 20.7.2006, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 14.12.2004
Где: Москва/Н.Новгород

Репутация: нет
Всего: нет



ситуация такая:

в цикле обрабатываются таблицы с именами имеющими на конце некий номер, (который как раз и меняется)
т.е. например 'dbname.dbo.t1', 'dbname.dbo.t2',...
при этом некоторой переменной @S на каждом этапе цикла присваивается какое то значение из текущей таблицы:
т.е.:
SET @S = (SELECT SUM(x) FROM >?< WHERE ...)
где на месте >?< должна быть соответствующая счетчику цикла таблица

вопрос:
что написать на месте >?<?
или иными словами как обращаться в таких случаях к таблице зная ее имя?

заранее спасибо
 
PM MAIL   Вверх
HalkaR
Дата 21.7.2006, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: нет
Всего: 42



Можно попробовать EXEC.Что-то типа
Код

SET @TABLE_NUMBER = 1;
SET @TABLE_NAME = CAST(@TABLE_NUMBER AS VARCHAR(3))
EXEC ('SET @S = (SELECT SUM(x) FROM ' + @TABLE_NAME +' WHERE ...)')

На работоспособность не тестил, но идея такая. 
PM MAIL   Вверх
Cleric
Дата 21.7.2006, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 14.12.2004
Где: Москва/Н.Новгород

Репутация: нет
Всего: нет



когда программа пытается выполнить EXEC ('SET @S = (SELECT SUM(x) FROM ' + @TABLE_NAME +' WHERE ...)'), то просит объявить переменную @S

здесь, разумеется, можно сделать все через временную таблицу куда каждый раз будет подобным заливаться текущая таблица (EXEC( 'INSERT INTO #T SELECT * FROM + @TABLE_NAME +' WHERE ...)'), и уже из этой временной таблицы #T, имя которой постоянно, можно брать сумму... но все таки хотелось бы обойтись без лишних наворотов, что б запрос быстрее выполнялся... 
PM MAIL   Вверх
HalkaR
Дата 21.7.2006, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: нет
Всего: 42



Cleric, а в чем проблема обьявить @S?

Добавлено @ 11:21 
Кстати можно написать хранимку в которую текстом передвать название и получать воврощаемое значение. 
PM MAIL   Вверх
Cleric
Дата 21.7.2006, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 14.12.2004
Где: Москва/Н.Новгород

Репутация: нет
Всего: нет



эээ... вот кусок кода:

Код

DECLARE @S float

exec('SET @S = (SELECT (CASE WHEN Valuta = 0 THEN TotalRUB ELSE TotalUSD END) AS TotalSUM 
FROM ' + @C + ' AS a WHERE a.DocID=-1 AND a.Date1 = ''' + @WhereDate + ''') ')


все равно будет просить объявить @S

или где мне ее объявлять тогда? 


проблема что exec не "видит" объявленную переменную а просто выполняет команду 

Это сообщение отредактировал(а) Cleric - 21.7.2006, 11:25
PM MAIL   Вверх
HalkaR
Дата 21.7.2006, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: нет
Всего: 42



Cleric, да ты прав здесь каша с областями видимости какимито - я не знал такой проблемы

Попробуй вариант с хранимкой.

Добавлено @ 11:27 
Я попробовал вот так smile 
Код

DECLARE @TABLE_NAME AS VARCHAR(20)
SET @TABLE_NAME = '[dbo].[Categories]'
EXEC('DECLARE @S AS INT
SELECT TOP 1 @S=CategoryID FROM ' + @TABLE_NAME +
'SELECT @S')



Добавлено @ 11:28 
Работает, но тебе это надо? 
PM MAIL   Вверх
Cleric
Дата 21.7.2006, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 14.12.2004
Где: Москва/Н.Новгород

Репутация: нет
Всего: нет



Цитата(HalkaR @  21.7.2006,  11:12 Найти цитируемый пост)
Кстати можно написать хранимку в которую текстом передвать название и получать воврощаемое значение.  

а как в таком случае будет выглядеть синтаксис того как переменной @S присваивается нужное значение? 
там наверное опять та же проблема возникнет... 

Это сообщение отредактировал(а) Cleric - 21.7.2006, 11:35
PM MAIL   Вверх
HalkaR
Дата 21.7.2006, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: нет
Всего: 42



Мда, задачка ...  smile  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0437 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.