Выборку данных из БД MSSQL будем осуществлять при помощи внешней компонены ADODB, т.к. для не нее не требуется устанавливать какие-либо дополнительные программы, библиотеки и т.п.
, где Сервер - адрес (сетевое имя или IP-адрес) сервера , База - название БД, как оно указано в MS SQL, uid - логин пользователя (пользователь по умолчанию sa), pwd - пароль пользователя (пароль по умолчанию для пользователя sa пустой, т.е. отсутствует)
Ну и далее самое сложное - текст запроса. Советую обратиться к соответствующей литературе этого языка программирования
ТекстЗапроса="SELECT CONVERT(nvarchar(10), colRegistrationTime, 108) AS EXPR1, * FROM tblAllRegistrations WHERE (tblAllRegistrations.colRegistrationTime BETWEEN "+НачДата+" AND "+КонДата+") AND (tblAllRegistrations.colPointNumber=1)";
CONVERT - преобразовать колонку colRegistrationTime в выбранный формат (время, длина 10 символов) и именовать его EXPR1 * - все значения FROM - из таблиц tblAllRegistrations - название таблицы WHERE - где значения колонки colRegistrationTime таблицы tblAllRegistrations находятся между НачДата и КонДата и значение tblAllRegistrations.colPointNumber=1
ЗапросАДО.CommandText=ТекстЗапроса;
Выборка=ЗапросАДО.Execute();
Если Выборка.EOF()=-1 Тогда Сообщить("Запрос не выполнился!");
Иначе Выборка.MoveFirst();
Пока Выборка.EOF()=0 Цикл
Также данные в MS SQL можно не только получать но и изменять
Делается это так же как и примером выше, меняем только строку запроса (вместо SELECT используем UPDATE)
UPDATE abonents // таблица в которой производим замену SET fdel = 1 // указываем в какую колонку какое значение нужно записать WHERE (FName = 'Abonent601ex') OR // искомые значения для замены (FName = 'Abonent602ex') OR (FName = 'Abonent603ex')
Условие, в данном случае, звучит примерно так - если в колонке "FName" встречаются значения "Abonent601ex" или "Abonent602ex" или "Abonent603ex", тогда в колонку "fdel" записать значение 1!
Для добавления новой строки в таблицу MS SQL используем INSERT INTO
Так, строка
НомТел="'+380800600060'";НомСценария=10;
ТекстЗапроса="insert into Robot (phone,scenario,priority) VALUES ("+НомТел+","+НомСценария+",0)";
добавит новую строку в таблицу Robot, в колонку phone будет добавлено значение переменной НомТел, а именно +380800600060, в колонку scenario значение переменной НомСценария (10) и в колонку priority запишется 0 после выполнения комманд:
Важно помнить, что в поля, имеющие строковое значение необходимо писать данные, заключенные в одинарную ковычку (')
Для удаления строк имеется DELETE FROM
ТекстЗапроса="DELETE FROM Robot where phone="+НомТел;
удалятся все строки в таблице Robot, в которых в колонке phone значение равно значению переменной НомТел
Если нужно очистить всю таблицу, т.е. удалить все строки:
ТекстЗапроса="DELETE * FROM Robot ";
BACKUP базы данных MS SQL.
Изменим только строку соединения, т.к. базу укажем далее СтрокаКоннекта="driver={SQL Server};server=(local);uid=sa;pwd=;";
И текст запроса ТекстЗапроса="BACKUP DATABASE [namebase] TO DISK = N'd:\backup' WITH INIT , NAME = N'full backup', NOSKIP , NOFORMAT";
Результаты запроса нам не важны, потому выполняем запрос и отключаемся от SQL ЗапросАДО.Execute();
Соединение.Close();
namebase - название базы данных d:\backup - путь и имя архива full backup - имя резервного набора данных
Использование компоненты 1c++ для получения данных MS SQL.
Т=" SELECT distinct
| TabJ.IDDOC as Doc
| , Tab2.SP5075 as Adr
| , Tab1.SP5070 as Kli
|FROM
| [dbo].[DH5083] As Tab1 (NoLock)
| INNER JOIN
| [dbo].[_1SJOURN] As TabJ ON (Tab1.IDDOC = TabJ.IDDOC)
| INNER JOIN
| [dbo].[DT5083] As Tab2 ON (Tab1.IDDOC = Tab2.IDDOC)
| INNER JOIN
| [dbo].[SC2760] As SprAdr ON (Tab2.SP5075 = SprAdr.ID)
| INNER JOIN
| [dbo].[SC46] As SprKli ON (Tab1.SP5070 = SprKli.ID)
|
|WHERE
| (LEFT(TabJ.DATE_TIME_IDDOC,8) >= :ДатаДокС)
| and (LEFT(TabJ.DATE_TIME_IDDOC,8) <= :ДатаДокПо)
| and (Tab2.SP5405>0)
|";
Если Запрос.Открыть(Т) = 1 Тогда
Запрос.УстТипыКолонок1С("Документ.Смета, Справочник.Адрес, Справочник.Клиенты");
Запрос.ПолучитьРезультатыВ_ТЗ(Рез,0);
Иначе
Сообщить(Запрос.ПолучитьОписаниеОшибки());
КонецЕсли;
если необходимо что-то изменить в результирующей таблице (например пустая дата должна иметь какое-то максимальне/минимальное значение) - применяем Case
select DISTINCT
| DocOM.IDDOC as Doc
| ,SprTov.ID as Tov
| ,SprKli.ID as Vlad
| ,SprVal.ID as Val
| ,Spr.ID as SpecCena
| ,Spr.SP3673 as dtFrom
| ,(Case Spr.SP3674
| When '1753-01-01' Then '2021-01-01' else Spr.SP3674 End)
| as dtTo
| ,DocOM.DATE_TIME_IDDOC
|FROM dbo.SC3336 as Spr (NoLock)
| INNER JOIN
| dbo.SC92 As SprTov (NoLock) ON (Spr.SP3338 = SprTov.ID)
| INNER JOIN
| dbo.SC72 As SprKli (NoLock) ON (Spr.PARENTEXT = SprKli.ID)
| INNER JOIN
| dbo._1SJOURN As DocOM (NoLock) ON (Spr.SP15208 = DocOM.IDDOC)
| INNER JOIN
| dbo.SC14 As SprVal (NoLock) ON (Spr.SP3340 = SprVal.ID)
|WHERE (Spr.ISMARK=0)
| And (Ltrim(Rtrim(SprKli.CODE))='"+СокрЛП(Клиент.Код)+"') And (Ltrim(Rtrim(SprTov.CODE))='"+СокрЛП(Товар.Код)+"')
| And (Ltrim(Rtrim(SprVal.CODE))='"+СокрЛП(Валюта.Код)+"')
| And (Spr.SP3673<='"+ДатСкл+"') And
| ((Spr.SP3674>='"+ДатСкл+"') or (Spr.SP3674='1753-01-01'))
|order by tov,dtFrom DESC,dtTo DESC,DocOM.DATE_TIME_IDDOC DESC
Узнать Размер таблиц в базе данных SQL
DECLARE @pagesizeKB int
SELECT @pagesizeKB = low / 1024 FROM master.dbo.spt_values
WHERE number = 1 AND type = 'E'
SELECT
table_name = OBJECT_NAME(o.id),
rows = i1.rowcnt,
reservedKB = (ISNULL(SUM(i1.reserved), 0) + ISNULL(SUM(i2.reserved), 0)) * @pagesizeKB,
dataKB = (ISNULL(SUM(i1.dpages), 0) + ISNULL(SUM(i2.used), 0)) * @pagesizeKB,
index_sizeKB = ((ISNULL(SUM(i1.used), 0) + ISNULL(SUM(i2.used), 0))
- (ISNULL(SUM(i1.dpages), 0) + ISNULL(SUM(i2.used), 0))) * @pagesizeKB,
unusedKB = ((ISNULL(SUM(i1.reserved), 0) + ISNULL(SUM(i2.reserved), 0))
- (ISNULL(SUM(i1.used), 0) + ISNULL(SUM(i2.used), 0))) * @pagesizeKB
FROM sysobjects o
LEFT OUTER JOIN sysindexes i1 ON i1.id = o.id AND i1.indid < 2
LEFT OUTER JOIN sysindexes i2 ON i2.id = o.id AND i2.indid = 255
WHERE OBJECTPROPERTY(o.id, N'IsUserTable') = 1 --same as: o.xtype = 'IsView'
OR (OBJECTPROPERTY(o.id, N'IsView') = 1 AND OBJECTPROPERTY(o.id, N'IsIndexed') = 1)
GROUP BY o.id, i1.rowcnt
ORDER BY 3 DESC
DELETE FROM `oc_product_description` WHERE `product_id` in (select `product_id` from `oc_product` where `status`=0)