| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MS SQL Server > взятие таблицы по имени |
| Автор: Cleric 20.7.2006, 14:40 |
| ситуация такая: в цикле обрабатываются таблицы с именами имеющими на конце некий номер, (который как раз и меняется) т.е. например 'dbname.dbo.t1', 'dbname.dbo.t2',... при этом некоторой переменной @S на каждом этапе цикла присваивается какое то значение из текущей таблицы: т.е.: SET @S = (SELECT SUM(x) FROM >?< WHERE ...) где на месте >?< должна быть соответствующая счетчику цикла таблица вопрос: что написать на месте >?<? или иными словами как обращаться в таких случаях к таблице зная ее имя? заранее спасибо |
| Автор: HalkaR 21.7.2006, 10:45 | ||
Можно попробовать EXEC.Что-то типа
На работоспособность не тестил, но идея такая. |
| Автор: Cleric 21.7.2006, 11:11 |
| когда программа пытается выполнить EXEC ('SET @S = (SELECT SUM(x) FROM ' + @TABLE_NAME +' WHERE ...)'), то просит объявить переменную @S здесь, разумеется, можно сделать все через временную таблицу куда каждый раз будет подобным заливаться текущая таблица (EXEC( 'INSERT INTO #T SELECT * FROM + @TABLE_NAME +' WHERE ...)'), и уже из этой временной таблицы #T, имя которой постоянно, можно брать сумму... но все таки хотелось бы обойтись без лишних наворотов, что б запрос быстрее выполнялся... |
| Автор: HalkaR 21.7.2006, 11:12 |
| Cleric, а в чем проблема обьявить @S? Добавлено @ 11:21 Кстати можно написать хранимку в которую текстом передвать название и получать воврощаемое значение. |
| Автор: Cleric 21.7.2006, 11:22 | ||
эээ... вот кусок кода:
все равно будет просить объявить @S или где мне ее объявлять тогда? проблема что exec не "видит" объявленную переменную а просто выполняет команду |
| Автор: HalkaR 21.7.2006, 11:26 | ||
| Cleric, да ты прав здесь каша с областями видимости какимито - я не знал такой проблемы Попробуй вариант с хранимкой. Добавлено @ 11:27 Я попробовал вот так
Добавлено @ 11:28 Работает, но тебе это надо? |
| Автор: HalkaR 21.7.2006, 11:46 |
| Мда, задачка ... |