Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как получить список столбцов таблицы / 22 сообщений из 22, страница 1 из 1
23.05.2005, 14:12
    #33080107
Shovgenyuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список столбцов таблицы
Как получить список столбцов таблицы кроме вычисляемых?

Запрос :

select * from INFORMATION_SCHEMA.columns
where TABLE_NAME=N'LstAnaliz'

выдает все столбцы, а как отбросить вычисляемые?
...
Рейтинг: 0 / 0
23.05.2005, 14:20
    #33080145
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список столбцов таблицы
Довесить условие
COLUMNPROPERTY ( id , column , 'IsComputed' )
...
Рейтинг: 0 / 0
23.05.2005, 14:48
    #33080236
Vladimir Kovalevskii
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список столбцов таблицы
sp_columns 'TABLE_NAME'

sp_help 'TABLE_NAME'

Код: plaintext
1.
2.
3.
SELECT * FROM syscolumns sc
 JOIN sysobjects so ON sc.id = so.id
WHERE so.Name = 'TABLE_NAME'
...
Рейтинг: 0 / 0
23.05.2005, 15:02
    #33080269
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список столбцов таблицы
2Vladimir Kovalevskii: вы бы хоть прочитали пост автора, а не только заголовок топика.
...
Рейтинг: 0 / 0
23.05.2005, 15:23
    #33080316
Vladimir Kovalevskii
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список столбцов таблицы
точно. не прочитал.

но даже если мы работаем с Views, что мешает нам использовать sys_columns, sys_objects?

вот что не понятно.
...
Рейтинг: 0 / 0
23.05.2005, 16:29
    #33080473
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список столбцов таблицы
Не sys_columns, sys_objects, а syscolumns и sysobjects. Это первое.

А второе - зачем. Ответ, как всегда, в BOL:
BOLInformation Schema Views
Microsoft® SQL Server™ 2000 provides two methods for obtaining meta data: system stored procedures or information schema views.

Note To obtain meta data, use system stored procedures, system functions, or these system-supplied views only. Querying the system tables directly may not provide accurate information if system tables are changed in future releases.

These views provide an internal, system table-independent view of the SQL Server meta data. Information schema views allow applications to work properly even though significant changes have been made to the system tables. The information schema views included in SQL Server conform to the SQL-92 Standard definition for the INFORMATION_SCHEMA.

SQL Server supports a three-part naming convention when referring to the current server. The SQL-92 standard also supports a three-part naming convention. However, the names used in both naming conventions are different. These views are defined in a special schema named INFORMATION_SCHEMA, which is contained in each database. Each INFORMATION_SCHEMA view contains meta data for all data objects stored in that particular database. This table describes the relationships between the SQL Server names and the SQL-92-standard names.

This naming convention mapping applies to these SQL Server SQL-92-compatible views. These views are defined in a special schema named INFORMATION_SCHEMA, which is contained in each database. Each INFORMATION_SCHEMA view contains meta data for all data objects stored in that particular database.
...
Рейтинг: 0 / 0
23.05.2005, 17:27
    #33080623
Vladimir Kovalevskii
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список столбцов таблицы
BOL
Note To obtain meta data, use system stored procedures, system functions, or these system-supplied views only. Querying the system tables directly may not provide accurate information if system tables are changed in future releases.



замечательно чем плохи
sp_* ? (sp - system procedure)

а то что в них происходит Direct Query To the System Tables. лан херня.

INFORMATION_SCHEMA - отличная и удобная абстракция (а именно таблица) рекоммендованная к использованию разработчиками для соотв. станд SQL-92, применительно к представлениям. и работая с представлениями надо использовать именно её.

но кто сказал, что нельзя и по-другому?
...
Рейтинг: 0 / 0
23.05.2005, 17:53
    #33080685
Hamlet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список столбцов таблицы
Извиняюсь за OFFTOPIC если конечно можно это считать таковым.

2 GreenSunrise
Естественно, совместимость с будущими версиями очень полезная вещь, но а как быть со скоростю. Использование системных таблиц для получения метаданных дает выгрыш в скорости напорядок выше по сравнению с информационными схеммами, так как они очень обшие.
Хотелось бы обсудить эту тему.
...
Рейтинг: 0 / 0
23.05.2005, 17:59
    #33080704
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список столбцов таблицы
дает выгрыш в скорости напорядок выше по сравнению с информационными схеммами, так как они очень обшие.
Про "на порядок" вы так сказали или тестировали ?
...
Рейтинг: 0 / 0
23.05.2005, 18:04
    #33080719
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список столбцов таблицы
Vladimir Kovalevskiiзамечательно чем плохи
sp_* ? (sp - system procedure)

а то что в них происходит Direct Query To the System Tables. лан херня.
Ничем. А кто говорил, что они плохи? Как раз то, что у них происходит ВНУТРИ, никого не волнует. Майкрософт может сколько угодно менять начинку в заявленных процедурах, лишь бы снаружи все возвращалось правильно. Так что процедуры - это замечательно.

Vladimir KovalevskiiINFORMATION_SCHEMA - отличная и удобная абстракция (а именно таблица)
А именно схема

Vladimir Kovalevskiiрекоммендованная к использованию разработчиками для соотв. станд SQL-92
В чем и состоит ее бонус. Соответствие стандарту. Стандарт - это черный ящик. Определяется, что должно быть на входе, что на выходе. Каким образом разработчики этого добьются - их дело. Именно поэтому более правильно (не единственно правильно, а более) использовать вещи, соответствующие стандарту, а не обращение напрямую к системным таблицам, как в вашем примере.

Ну и напоследок. Мой пост http://www.sql.ru/forum/actualpost.aspx?bid=1&tid=186277&mid=0&p=1#1564587 относился не к тому, что вы что-то неправильно сказали, а только к тому, что автор спрашивал про то, как отсечь вычисляемые колонки. В то время как ваш ответ был исключительно на вопрос "Как получить список столбцов таблицы". Разве что sp_help могла стать ответом на вопрос, потому как в возвращаемом ею рекордсете есть столбец Computed.
...
Рейтинг: 0 / 0
23.05.2005, 18:08
    #33080728
Hamlet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список столбцов таблицы
2 Gory
Тестировал. Но придется верить на слово, так как пример я не приведу ;-)
...
Рейтинг: 0 / 0
23.05.2005, 18:10
    #33080734
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список столбцов таблицы
HamletИзвиняюсь за OFFTOPIC если конечно можно это считать таковым.

2 GreenSunrise
Естественно, совместимость с будущими версиями очень полезная вещь, но а как быть со скоростю. Использование системных таблиц для получения метаданных дает выгрыш в скорости напорядок выше по сравнению с информационными схеммами, так как они очень обшие.
Хотелось бы обсудить эту тему.
Приведите результаты тестов и мы с удовольствием ее обсудим. "На порядок" - весьма серьезное заявление. Вы готовы подтвердить его?

В конце концов, эти вьюхи - обычные вьюхи, чей код можно посмотреть и чей план выполнения тоже. Скорее всего, если вам надо будет сделать сложный запрос к нескольким вьюхам из INFORMATION_SCHEMA, впихнуть туда кучу джойнов и условий, то да, наверное, проигрыш в скорости будет. И в ситуации, когда я увижу непозволительную потерю производительности для моей конкретной задачи, я откажусь от этих вьюх в пользу прямого обращения к системным таблицам. Но для такого решения я проведу серьезные тесты и приведу конкретные результаты.
...
Рейтинг: 0 / 0
23.05.2005, 18:11
    #33080739
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список столбцов таблицы
Hamlet2 Gory
Тестировал. Но придется верить на слово, так как пример я не приведу ;-)
Извините, не знаю, как Glory, а я предпочту не верить до получения результатов. Вот с ними - пожалуйста. Особенно, если у меня воспроизведется такая потеря.
...
Рейтинг: 0 / 0
23.05.2005, 18:17
    #33080752
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список столбцов таблицы
Hamlet2 Gory
Тестировал. Но придется верить на слово, так как пример я не приведу ;-)
На порядок - это как минимум в 10 раз. Для таких заявления одного честного слова маловато.
Хотя можно разумеется построить более простой запрос, чем использован а INFORMATION_SCHEMA
...
Рейтинг: 0 / 0
23.05.2005, 19:07
    #33080851
Hamlet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список столбцов таблицы
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SELECT T.TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS T JOIN
INFORMATION_SCHEMA.KEY_COLUMN_USAGE C ON T.TABLE_NAME = C.TABLE_NAME and T.CONSTRAINT_NAME = C.CONSTRAINT_NAME 
WHERE CONSTRAINT_TYPE = 'PRIMARY KEY'


 select
	t_obj.name	as TABLE_NAME
	,col.name	as COLUMN_NAME
	,v.number	as ORDINAL_POSITION
from sysobjects	t_obj 
	JOIN sysobjects	c_obj
		ON t_obj.id	= c_obj.parent_obj
	JOIN syscolumns	col
		ON t_obj.id	= col.id
	JOIN sysindexes i
		ON t_obj.id	= i.id
	JOIN master.dbo.spt_values v
		ON v.number 	<= i.keycnt
			and c_obj.name  = i.name
			and col.name	= index_col(t_obj.name,i.indid,v.number)
where c_obj.xtype	='PK'
	and t_obj.xtype  = 'U'
	and v.number 	>  0  
 	and v.type 	= 'P'



Query 1: Query cost (relative to the batch): 77.20%

Query 2: Query cost (relative to the batch): 22.80%
...
Рейтинг: 0 / 0
23.05.2005, 19:28
    #33080887
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список столбцов таблицы
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
declare @start datetime

set @start = getdate()
SELECT T.TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS T JOIN
INFORMATION_SCHEMA.KEY_COLUMN_USAGE C ON T.TABLE_NAME = C.TABLE_NAME and T.CONSTRAINT_NAME = C.CONSTRAINT_NAME 
WHERE CONSTRAINT_TYPE = 'PRIMARY KEY'
select datediff(ms, @start, getdate())


set @start = getdate()
 select
	t_obj.name	as TABLE_NAME
	,col.name	as COLUMN_NAME
	,v.number	as ORDINAL_POSITION
from sysobjects	t_obj 
	JOIN sysobjects	c_obj
		ON t_obj.id	= c_obj.parent_obj
	JOIN syscolumns	col
		ON t_obj.id	= col.id
	JOIN sysindexes i
		ON t_obj.id	= i.id
	JOIN master.dbo.spt_values v
		ON v.number 	<= i.keycnt
			and c_obj.name  = i.name
			and col.name	= index_col(t_obj.name,i.indid,v.number)
where c_obj.xtype	='PK'
	and t_obj.xtype  = 'U'
	and v.number 	>  0  
 	and v.type 	= 'P'
select datediff(ms, @start, getdate())

1ый запрос 66 - 146 ms(min/max)
2ой запрос 33-50ms(min/max)

Где обещанный на порядок ?
...
Рейтинг: 0 / 0
23.05.2005, 19:45
    #33080914
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список столбцов таблицы
по logical reads-ам тоже 884 на 473
...
Рейтинг: 0 / 0
23.05.2005, 21:17
    #33080987
Hamlet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список столбцов таблицы
А если так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
declare @start datetime

set @start = getdate()
SELECT T.TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS T JOIN
INFORMATION_SCHEMA.KEY_COLUMN_USAGE C ON T.TABLE_NAME = C.TABLE_NAME and T.CONSTRAINT_NAME = C.CONSTRAINT_NAME 
WHERE CONSTRAINT_TYPE = 'PRIMARY KEY'
select datediff(ms, @start, getdate())


set @start = getdate()
 select
	t_obj.name	as TABLE_NAME
	,col.name	as COLUMN_NAME

from sysobjects	t_obj 
	JOIN sysobjects	c_obj
		ON t_obj.id	= c_obj.parent_obj
	JOIN syscolumns	col
		ON t_obj.id	= col.id
	JOIN sysindexes i
		ON t_obj.id	= i.id
where c_obj.xtype	='PK'
	and t_obj.xtype  = 'U'
select datediff(ms, @start, getdate())

У меня нет составных ключей ;-))
...
Рейтинг: 0 / 0
23.05.2005, 21:22
    #33080991
Hamlet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список столбцов таблицы
Пардон, опечатка (спешу домой однако).

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
declare @start datetime

set @start = getdate()
SELECT DISTINCT T.TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS T JOIN
INFORMATION_SCHEMA.KEY_COLUMN_USAGE C ON T.TABLE_NAME = C.TABLE_NAME and T.CONSTRAINT_NAME = C.CONSTRAINT_NAME 
WHERE CONSTRAINT_TYPE = 'PRIMARY KEY'
select datediff(ms, @start, getdate())


set @start = getdate()
 select
	t_obj.name	as TABLE_NAME
	,col.name	as COLUMN_NAME
from sysobjects	t_obj 
	JOIN sysobjects	c_obj
		ON t_obj.id	= c_obj.parent_obj
	JOIN syscolumns	col
		ON t_obj.id	= col.id
	JOIN sysindexes i
		ON t_obj.id	= i.id
			and c_obj.name  = i.name
			and col.name	= index_col(t_obj.name,i.indid, 1 )
where c_obj.xtype	='PK'
	and t_obj.xtype  = 'U'
select datediff(ms, @start, getdate())
...
Рейтинг: 0 / 0
24.05.2005, 11:21
    #33081589
Vladimir Kovalevskii
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список столбцов таблицы
!!!!!!! читем внимательно BOL все вместе !!!!!!!!!

и насчёт системных процедур.
1. Их КОД ОТКРЫТ.
2. Плохой из тебя программист если ты не знаешь, как работает докумментированная процедура !
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
08.06.2021, 10:03
    #40076294
Диана Орел
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список столбцов таблицы
А если ни в таблице sysobjects, ни в INFORMATION_SCHEMA.columns нет пользовательских таблиц?
...
Рейтинг: 0 / 0
08.06.2021, 10:17
    #40076296
Ennor Tiegael
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить список столбцов таблицы
Диана Орел,

1. Смотрите не в той базе.
2. У вас нет прав.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как получить список столбцов таблицы / 22 сообщений из 22, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]