Имя: Пароль:
1C
 
Как узнать количество строк в SQL Таблице
0 picom
 
11.09.09
12:41
Есть в отчете обращение напрямую в таблицу SQL 2005
Количество колонок я смог получить функцией Recordset.Fields.Count
А вот как получить количество строк в этой самой таблице?
Работаю в 8.1 УТ последняя
1 ZanderZ
 
11.09.09
12:42
а у рекордсета разве нет свойства count &
2 shadow_sw
 
11.09.09
12:44
count
3 shuhard
 
11.09.09
12:44
(0)[Работаю в 8.1 УТ последняя]
и при чем здесь OLEDB

количество записей в рекордсете можно получить после MoveLast MoveFirst
4 sapphire
 
11.09.09
12:45
(0) select count(*) ВсегоЗаписей from {Имятаблицы}
5 picom
 
11.09.09
12:51
(1)(2)
нету такой записи
(4)
можно подробнее?
6 shadow_sw
 
11.09.09
12:52
смотри (4) там все написано
7 sapphire
 
11.09.09
12:53
(5) Простите куда уж тут подробней...
Да простит меня ВР (с)

Электронная документация по SQL Server 2008 (январь 2009 г.)  

Функция COUNT (Transact-SQL)  Отправить отзыв
 См. также    
Свернуть всеРазвернуть все Фильтр по языкам: ВсеФильтр по языкам: НесколькоФильтр по языкам: Visual BasicФильтр по языкам: C#Фильтр по языкам: C++Фильтр по языкам: J#Фильтр по языкам: JScript

Visual Basic(Declaration)
C#
C++
J#
JScript

Возвращает количество элементов в группе. Функция COUNT работает как функция COUNT_BIG. Единственное различие между двумя функциями — возвращаемые значения. Функция COUNT всегда возвращает значение типа int. Функция COUNT_BIG всегда возвращает значение типа данных bigint. Может следовать за предложением OVER.

Синтаксические обозначения в Transact-SQL

Синтаксис

COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } )


Аргументы
ALL
Применяет статистическую функцию ко всем значениям. ALL применяется по умолчанию.

DISTINCT
Указывает, что функция COUNT возвращает количество уникальных значений, не равных NULL.

expression
Выражение любого типа, за исключением text, image или ntext. Статистические функции и вложенные запросы запрещены.

*
Указывается, что при возврате общего числа строк в таблице необходимо посчитать все строки. Функция COUNT(*) не принимает аргументы и не может использоваться с ключевым словом DISTINCT. Для функции COUNT(*) не нужен аргумент expression, так как по определению она не использует сведения о каких-либо конкретных столбцах. Функция COUNT(*) возвращает количество строк в указанной таблице, не отбрасывая дублированные строки. Подсчитывает каждую строку отдельно. При этом учитываются и строки, содержащие значения NULL.

Замечания
Функция COUNT(*) возвращает количество элементов в группе. Сюда входят значения NULL и повторяющиеся значения.

Функция COUNT(ALL expression) оценивает expression для каждой строки в группе и возвращает количество значений, не равных NULL.

Функция COUNT(DISTINCT expression) оценивает expression для каждой строки в группе и возвращает количество уникальных значений, не равных NULL.

Для возвращаемых значений, больших 2^31-1, функция COUNT формирует сообщение об ошибке. Вместо этого следует использовать COUNT_BIG.

Типы возвращаемых данных
int

Примеры
A. Использование функции COUNT и аргумента DISTINCT
В следующем примере приводится количество различных должностей, которые могут иметь служащие, работающие в компании Adventure Works Cycles.

Копировать код
USE AdventureWorks;
GO
SELECT COUNT(DISTINCT Title)
FROM HumanResources.Employee;
GO


Ниже приводится результирующий набор.

Копировать код
-----------
67

(1 row(s) affected)


Б. Использование функции COUNT(*)
В следующем примере определяется общее количество служащих, работающих в компании Adventure Works Cycles.

Копировать код
USE AdventureWorks;
GO
SELECT COUNT(*)
FROM HumanResources.Employee;
GO


Ниже приводится результирующий набор.

Копировать код
           
-----------
290

(1 row(s) affected)


В. Использование функции COUNT(*) совместно с другими статистическими функциями
В следующем примере показывается, что функция COUNT(*) в списке выбора может сочетаться с другими статистическими функциями.

Копировать код
USE AdventureWorks;
GO
SELECT COUNT(*), AVG(Bonus)
FROM Sales.SalesPerson
WHERE SalesQuota > 25000;
GO


Ниже приводится результирующий набор.

Копировать код
                               
----------- ---------------------
14            3472.1428
(1 row(s) affected)


См. также
Справочник
Статистические функции (Transact-SQL)
COUNT_BIG (Transact-SQL)
Предложение OVER (Transact-SQL)
8 shuhard
 
11.09.09
12:54
(5) ясен пень, что не count, а  RecordCount()
9 sapphire
 
11.09.09
12:56
(8) Ну не любят одинесники справку по тем средствам, которыми пользуются :)))
+ к тому же в (0) речь шла о количестве записей в таблице вообще, а не попавших в конкретный запрос :D
10 sapphire
 
11.09.09
13:07
Пропал автор, наверное зачитался :)
11 shuhard
 
11.09.09
13:08
(10) угу, скачал BOL  и офигивает
12 picom
 
11.09.09
13:08
Вы уж простите меня, но как на языке 1с мне туда загнать этот запрос (4), если

Свойство    Значение    Тип
Recordset.RecordCount    -1    Число

Кроме этого методы

Recordset.MoveLast();
Recordset.MoveFirst();

не работают
13 sapphire
 
11.09.09
13:11
(12) Я надеюсь, что Вы догадываетесь о том, что Recordset не является объектом 1С...
14 sapphire
 
11.09.09
13:13
Почитайте для начала:
http://script-coding.info/ADO.html
15 shuhard
 
11.09.09
13:14
(12)[Кроме этого методы

Recordset.MoveLast();
Recordset.MoveFirst();

не работают]

как рекордсет открыл в режиме последовательного доступа, так он тебя и послал
16 picom
 
11.09.09
13:14
Народ, ну неужели сложно мне подсказать строку в формате 1с для получения количества строк ...
17 dk
 
11.09.09
13:14
(12) http://www.script-coding.info/ADO.html
Читай про RecordCount и вообще
18 los_hooliganos
 
11.09.09
13:18
Recordset.Execute("SELECT COUNT(*) FROM database.table")
19 picom
 
11.09.09
13:23
(18) Execute не работает!
20 sapphire
 
11.09.09
13:39
//(19) Над Вами уже потешаются.
Command=Recordset.ActiveCommand;
Recordset_Всего=Command.Execute("SELECT COUNT(*) FROM database.table");
Если НЕ Recordset_Всего.EOF Тогда
   ВсегоЗаписейВТаблице=Recordset_Всего.Fields(0).Value;  
КонецЕсли;
21 shuhard
 
11.09.09
13:48
(19) пипец
код покажи
22 sapphire
 
11.09.09
14:06
(21) А зачем?! Хочешь сказать, что (20) не отработает?;)
23 shuhard
 
11.09.09
14:15
(22) конечно не отработает, чел ведь так и всадил "FROM database.table"
24 picom
 
11.09.09
16:29
(20)
Подскажите еще
в таблице ~90 т. строк
Но результат предложенного кода ~181 т.
25 picom
 
12.09.09
06:22
up
26 picom
 
12.09.09
12:00
up
27 los_hooliganos
 
14.09.09
06:29
(24) скорее всего неправильный джоин, показывай код с запросом.
28 picom
 
14.09.09
06:57
Connection = Новый COMОбъект("ADODB.Connection");
       Connection.Open(СтрокаПодключения);
   Recordset = Новый COMОбъект("ADODB.Recordset");
   Recordset.ActiveConnection = Connection;

   Source  = "SELECT    *    FROM
   |  [AKR_excel].[dbo].[table_values_137]
   |";
   
Command=Recordset.ActiveCommand;
Recordset_Всего=Command.Execute("SELECT COUNT(*) FROM database.table_values_137");
Если НЕ Recordset_Всего.EOF Тогда
   ВсегоЗаписейВТаблице=Recordset_Всего.Fields(0).Value;  
КонецЕсли;

Результат более чем в 2 раза превышает количество строк реальное
29 los_hooliganos
 
14.09.09
08:31
Откуда известно про реальное количество строк???

Connection = Новый COMОбъект("ADODB.Connection");
       Connection.Open(СтрокаПодключения);
   Recordset = Новый COMОбъект("ADODB.Recordset");
   Recordset.ActiveConnection = Connection;

   Source  = "(SELECT     *    FROM
   |  [AKR_excel].[dbo].[table_values_137]
   |)";
   
Command=Recordset.ActiveCommand;
Recordset_Всего=Command.Execute("SELECT COUNT(*) FROM "+Source);
Если НЕ Recordset_Всего.EOF Тогда
   ВсегоЗаписейВТаблице=Recordset_Всего.Fields(0).Value;  
КонецЕсли;
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший