|
v7: Как из таблицы значений создать временную таблицу sql | ☑ | ||
---|---|---|---|---|
0
LisaAlisa
29.05.19
✎
16:03
|
Добрый день!
Есть таблица значений с колонками "Подразделение" имеет тип Справочники.Подразделения "Номер" тип Число. Можно ли используя прямой запрос создать временную таблицу по данным таблицы значений? |
|||
1
Mikeware
29.05.19
✎
16:04
|
можно
|
|||
2
Mikeware
29.05.19
✎
16:06
|
ВыполнитьSQLизТЗ()
|
|||
3
Очевидно
29.05.19
✎
17:10
|
(0)
--Создаем временную таблицу Create table #tt1 (Column_NUMBER NUMERIC(38,9), Column_REF BINARY(16)) -- Добавляем первую строку из ТЗ INSERT INTO #tt1 (Column_NUMBER,Column_REF) VALUES(*Номер*,*sql id ссылки*) -- Добавляем Вторую строку из ТЗ INSERT INTO #tt1 (Column_NUMBER,Column_REF) VALUES(*Номер*,*sql id ссылки*) -- и т.д. |
|||
4
LisaAlisa
29.05.19
✎
17:33
|
ТабЮЛ = СоздатьОбъект("ТаблицаЗначений");
ТабЮЛ.НоваяКолонка("ЮЛ", "Справочник.Подразделения",,); ТабЮЛ.НоваяКолонка("Приоритет", "Число", 10, 0); Сч = 1; Пока Сч <= ДопЮЛ.РазмерСписка() Цикл ТабЮЛ.НоваяСтрока(); ТабЮЛ.ЮЛ = ДопЮЛ.ПолучитьЗначение(Сч); ТабЮЛ.Приоритет = Сч; Сч = Сч + 1; КонецЦикла; RS.Отладка(1); ТекстЗапроса = " |IF EXISTS (SELECT * | FROM tempdb..sysobjects | WHERE id = object_id('tempdb..##PrioritetUL')) | DROP TABLE ##PrioritetUL |"; rs.Выполнить(ТекстЗапроса); Если rs.Подготовить(" |Insert into ##PrioritetUL (ЮЛ, Приоритет) VALUES (?,?)")=0 тогда Предупреждение(rs.ПолучитьОписаниеОшибки()); возврат ; КонецЕсли; rs.ВыполнитьSQL_ИзТЗ(ТабЮЛ); Ошибка: rs.ВыполнитьSQL_ИзТЗ(ТабЮЛ); {E:\...}: Произошла ошибка при формировании автоматических параметров. Необходимо выполнить подготовку запроса или проверить синтаксис! State 42S02, native 208, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name '##PrioritetUL'. |
|||
5
palpetrovich
29.05.19
✎
17:41
|
(4) Create потеряла
вот рабочий код: Процедура ВТ_ИЗ_ТЗ() _тз = СоздатьОбъект("ТаблицаЗначений"); _тз.НоваяКолонка("Дата", "Дата"); _тз.НоваяКолонка("Строка","Строка", 3); _тз.НоваяСтрока();_тз.Дата = ТекущаяДата();_тз.Строка = "Раз"; _тз.НоваяСтрока();_тз.Дата = ТекущаяДата()+1;_тз.Строка = "Два"; рс = СоздатьОбъект("ODBCRecordSet"); рс.ВыполнитьИнструкцию("IF OBJECT_ID(N'tempdb..#ВТ_ИЗ_ТЗ', N'U') IS NOT NULL DROP TABLE #ВТ_ИЗ_ТЗ"); рс.Выполнить("Create table #ВТ_ИЗ_ТЗ (Дата DateTime, Строка varchar(3))"); рс.Подготовить("Insert Into #ВТ_ИЗ_ТЗ (Дата, Строка) Values (?,?)"); рс.ВыполнитьSQL_ИзТЗ(_тз); тзРез = рс.ВыполнитьИнструкцию("select * from #ВТ_ИЗ_ТЗ ").ВыбратьСтроку(); рс.ВыполнитьИнструкцию("IF OBJECT_ID(N'tempdb..#ВТ_ИЗ_ТЗ', N'U') IS NOT NULL DROP TABLE #ВТ_ИЗ_ТЗ"); КонецПроцедуры |
|||
6
LisaAlisa
29.05.19
✎
18:01
|
(5) какой тип поля описать в ВТ, если в ТЗ поле имеет тип Справочник.Подразделение?
|
|||
7
Botanik8888
29.05.19
✎
18:08
|
(6) По длине идентификатора, если не запамятовал то 13 символов для id справочника
|
|||
8
Botanik8888
29.05.19
✎
18:09
|
+(7) извините, ошибся. 9 Символов.
ЗЗЫ: http://www.metaprog.co.ua/secrprog/const_spr.html |
|||
9
Z1
29.05.19
✎
19:15
|
(6) char(9)
(4) Если временная таблица с ## эта таблица для всех пользователей sql удаляя такую таблицу можешь удалить данные другого пользователя которые в этот момент используются другим процессом. Это надо учитывать Второе в эту таблицу можети другой процесс записать и снова труднообнаруживаемая ошибка Для таких таблиц лучше иметь внутри колонку spid и по ней записывать читать , удалять данные. А саму таблицу в нужном месте просто создавайте ( create ) Т.е. если таблица есть она не создастся если нет то создастся. # это врменная таблица текущего процесса. |
|||
10
LisaAlisa
30.05.19
✎
10:21
|
Изменила код
RS.ВыполнитьИнструкцию("IF OBJECT_ID(N'tempdb..#PrioritetUL', N'U') IS NOT NULL DROP TABLE #PrioritetUL"); rs.Выполнить("Create table #PrioritetUL (ЮЛ CHAR(9), Приоритет SMALLINT (2))"); Если rs.Подготовить(" |Insert into #PrioritetUL (ЮЛ, Приоритет) VALUES (?,?)")=0 тогда Предупреждение(rs.ПолучитьОписаниеОшибки()); возврат ; КонецЕсли; rs.ВыполнитьSQL_ИзТЗ(ТабЮЛ); Ошибка та же: {E:\///}: Произошла ошибка при формировании автоматических параметров. Необходимо выполнить подготовку запроса или проверить синтаксис! State 42S02, native 208, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name '#PrioritetUL'. |
|||
11
trad
30.05.19
✎
10:53
|
||||
12
Sserj
30.05.19
✎
11:05
|
За сутки можно уже было просто в ручную набросать :)
метаДата = СоздатьОбъект("MetaDataWork"); текстЗапроса = " |Insert into #PrioritetUL (ЮЛ, Приоритет) | VALUES "; текстЗначений = ""; ТабЮЛ.ВыбратьСтроки(); Пока ТабЮЛ.ПолучитьСтроку() = 1 Цикл текстЗначений = текстЗначений + "," + РазделительСтрок + "('" + метаДата.ЗначениеВСтрокуБД(ТабЮл.Юл) + "'," + СокрЛП(ТабЮл.Приоритет) + ")"; КонецЦикла; //Убираем первую запятую текстЗначений = Сред(текстЗначений, 2); текстЗапроса = текстЗапроса + текстЗначений; rs.Выполнить(текстЗапроса); |
|||
13
LisaAlisa
30.05.19
✎
11:26
|
(11) (12)
Спасибо, эти способы я тоже попробую, но хочется понять, что в моем коде не так |
|||
14
Z1
30.05.19
✎
11:50
|
(13) Пиши проще
Попытка rs.Выполнить("Create table #PrioritetUL (ЮЛ CHAR(9), Приоритет SMALLINT )"); // (2) это лишнее Исключение Коецпопытки; создалась или нет таблица можно проверить обрамив исключением Тз1 = rs.Выполнить("select top 1 *from #PrioritetUL "); Мое мнение не надо колонки называть русскими символами, и конструкция tempdb..#PrioritetUL мне непончтна не факт что это эквивалентно имени #PrioritetUL |
|||
15
LisaAlisa
30.05.19
✎
12:30
|
(14) Переименовала колонки в латиницу, таблица создалась. Спасибо!
|
|||
16
LisaAlisa
30.05.19
✎
12:31
|
(11) Посмотрела Ваш код
Для Тек=1 По ТЗ.КоличествоКолонок() Цикл ка); //ЗДЕСЬ ЧТО ДОЛЖНО БЫТЬ? Если (ПустаяСтрока(Колонки)=0)И(Найти(Колонки,Идентификатор)=0) Тогда Продолжить; КонецЕсли; |
|||
17
trad
30.05.19
✎
12:41
|
(16)
Для Тек=1 По ТЗ.КоличествоКолонок() Цикл Идентификатор=ТЗ.ПолучитьПараметрыКолонки(Тек,Тип,Длина,Точность,,,ФорматнаяСтрока); Если (ПустаяСтрока(Колонки)=0)И(Найти(Колонки,Идентификатор)=0) Тогда Продолжить; КонецЕсли; |
|||
18
LisaAlisa
30.05.19
✎
13:36
|
Спасибо всем за помощь!!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |