powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как получить список столбцов таблицы
22 сообщений из 22, страница 1 из 1
Как получить список столбцов таблицы
    #33080107
Фотография Shovgenyuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как получить список столбцов таблицы кроме вычисляемых?

Запрос :

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

выдает все столбцы, а как отбросить вычисляемые?
...
Рейтинг: 0 / 0
Как получить список столбцов таблицы
    #33080145
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Довесить условие
COLUMNPROPERTY ( id , column , 'IsComputed' )
...
Рейтинг: 0 / 0
Как получить список столбцов таблицы
    #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
Как получить список столбцов таблицы
    #33080269
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Vladimir Kovalevskii: вы бы хоть прочитали пост автора, а не только заголовок топика.
...
Рейтинг: 0 / 0
Как получить список столбцов таблицы
    #33080316
Vladimir Kovalevskii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
точно. не прочитал.

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

вот что не понятно.
...
Рейтинг: 0 / 0
Как получить список столбцов таблицы
    #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
Как получить список столбцов таблицы
    #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
Как получить список столбцов таблицы
    #33080685
Hamlet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь за OFFTOPIC если конечно можно это считать таковым.

2 GreenSunrise
Естественно, совместимость с будущими версиями очень полезная вещь, но а как быть со скоростю. Использование системных таблиц для получения метаданных дает выгрыш в скорости напорядок выше по сравнению с информационными схеммами, так как они очень обшие.
Хотелось бы обсудить эту тему.
...
Рейтинг: 0 / 0
Как получить список столбцов таблицы
    #33080704
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дает выгрыш в скорости напорядок выше по сравнению с информационными схеммами, так как они очень обшие.
Про "на порядок" вы так сказали или тестировали ?
...
Рейтинг: 0 / 0
Как получить список столбцов таблицы
    #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
Как получить список столбцов таблицы
    #33080728
Hamlet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Gory
Тестировал. Но придется верить на слово, так как пример я не приведу ;-)
...
Рейтинг: 0 / 0
Как получить список столбцов таблицы
    #33080734
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HamletИзвиняюсь за OFFTOPIC если конечно можно это считать таковым.

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

В конце концов, эти вьюхи - обычные вьюхи, чей код можно посмотреть и чей план выполнения тоже. Скорее всего, если вам надо будет сделать сложный запрос к нескольким вьюхам из INFORMATION_SCHEMA, впихнуть туда кучу джойнов и условий, то да, наверное, проигрыш в скорости будет. И в ситуации, когда я увижу непозволительную потерю производительности для моей конкретной задачи, я откажусь от этих вьюх в пользу прямого обращения к системным таблицам. Но для такого решения я проведу серьезные тесты и приведу конкретные результаты.
...
Рейтинг: 0 / 0
Как получить список столбцов таблицы
    #33080739
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hamlet2 Gory
Тестировал. Но придется верить на слово, так как пример я не приведу ;-)
Извините, не знаю, как Glory, а я предпочту не верить до получения результатов. Вот с ними - пожалуйста. Особенно, если у меня воспроизведется такая потеря.
...
Рейтинг: 0 / 0
Как получить список столбцов таблицы
    #33080752
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hamlet2 Gory
Тестировал. Но придется верить на слово, так как пример я не приведу ;-)
На порядок - это как минимум в 10 раз. Для таких заявления одного честного слова маловато.
Хотя можно разумеется построить более простой запрос, чем использован а INFORMATION_SCHEMA
...
Рейтинг: 0 / 0
Как получить список столбцов таблицы
    #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
Как получить список столбцов таблицы
    #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
Как получить список столбцов таблицы
    #33080914
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по logical reads-ам тоже 884 на 473
...
Рейтинг: 0 / 0
Как получить список столбцов таблицы
    #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
Как получить список столбцов таблицы
    #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
Как получить список столбцов таблицы
    #33081589
Vladimir Kovalevskii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
!!!!!!! читем внимательно BOL все вместе !!!!!!!!!

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

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


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