powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Наличие ПОЛЯ в таблице
24 сообщений из 24, страница 1 из 1
Наличие ПОЛЯ в таблице
    #39810182
DogBaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица TableTemp с тремя полями (Field1 [int], Field2 [int], Field3 [int]) как узнать если в таблице поле Field4 [int], если есть вывести значение с этого поля, если ПОЛЯ "Field4" нет вывести "0"?



Спасибо...
...
Рейтинг: 0 / 0
Наличие ПОЛЯ в таблице
    #39810199
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DogBaks,
Ты же сам написал, что в таблице только 3 поля, и ни одно по названию не похоже на Field4. Значит, поля нет.

Даже скрипты писать не пришлось. Можешь не благодарить.
...
Рейтинг: 0 / 0
Наличие ПОЛЯ в таблице
    #39810200
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DogBaks,

или через динамику или через IF EXISTS(....) ELSE
...
Рейтинг: 0 / 0
Наличие ПОЛЯ в таблице
    #39810208
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKDogBaks,

или через динамику или через IF EXISTS(....) ELSE

с if exists, как я понимаю, тоже только через динамику
ибо при отсутствии поля оно таки не компилируется.
а вот при отсутствии таблицы - пожалуйста.
...
Рейтинг: 0 / 0
Наличие ПОЛЯ в таблице
    #39810210
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
IF COL_LENGTH(N'ИмяТаблицы', N'ИмяПоля') IS NULL
 PRINT 'Нет такого поля! А может, и таблицы такой нет!';
...
Рейтинг: 0 / 0
Наличие ПОЛЯ в таблице
    #39810221
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПосетительTaPaKDogBaks,

или через динамику или через IF EXISTS(....) ELSE

с if exists, как я понимаю, тоже только через динамику
ибо при отсутствии поля оно таки не компилируется.
а вот при отсутствии таблицы - пожалуйста.


IF EXISTS SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS ...

или как iap
...
Рейтинг: 0 / 0
Наличие ПОЛЯ в таблице
    #39810223
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKПосетительпропущено...


с if exists, как я понимаю, тоже только через динамику
ибо при отсутствии поля оно таки не компилируется.
а вот при отсутствии таблицы - пожалуйста.


IF EXISTS SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS ...

или как iap

я немного не про то

Код: sql
1.
2.
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS ... )
  select Field4 from TableName



даст ошибку компиляции при отсутствии поля несмотря на то, что до выполнения кода дело не дойдёт.
чтобы не дало - придется обернуть.
Код: sql
1.
2.
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS ... )
 exec('select Field4 from TableName')
...
Рейтинг: 0 / 0
Наличие ПОЛЯ в таблице
    #39810226
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посетитель,

а, ну да
...
Рейтинг: 0 / 0
Наличие ПОЛЯ в таблице
    #39810229
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посетитель,
ты от вопрос ТС не уходи.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
CREATE TABLE #temp1 ( [field1] INT )
CREATE TABLE #temp2 ( [field2] INT, [field4] INT )
;
DECLARE @tsql NVARCHAR(MAX)
;
SET @tsql = N'
SELECT
  [field1] = [field1],
  [field4] = ' + CASE WHEN COL_LENGTH( 'tempdb..#temp1', 'field4' ) IS NOT NULL THEN '[field4]' ELSE '0' END + '
FROM
  #temp1
'
;
PRINT @tsql
;
SET @tsql = N'
SELECT
  [field1] = [field1],
  [field4] = ' + CASE WHEN COL_LENGTH( 'tempdb..#temp2', 'field4' ) IS NOT NULL THEN '[field4]' ELSE '0' END + '
FROM
  #temp2
'
;
PRINT @tsql
...
Рейтинг: 0 / 0
Наличие ПОЛЯ в таблице
    #39810233
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руслан ДамировичПосетитель,
ты от вопрос ТС не уходи.


куда уж мне до вас


Руслан ДамировичDogBaks,
Ты же сам написал, что в таблице только 3 поля, и ни одно по названию не похоже на Field4. Значит, поля нет.

Даже скрипты писать не пришлось. Можешь не благодарить.
...
Рейтинг: 0 / 0
Наличие ПОЛЯ в таблице
    #39810234
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посетителькуда уж мне до вас

Ничего, батенька, оно с возрастом придет. Доживете-ль-с?
...
Рейтинг: 0 / 0
Наличие ПОЛЯ в таблице
    #39810247
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
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.
30.
31.
32.
use tempdb;
go

create table dbo.TempTable (f1 int, f2 int, f3 int);
insert into dbo.TempTable
values
 (1, 1, 1), (2, 2, 2), (3, 3, 3);

select
 a.n.value('f1[1]', 'int') as f1,
 a.n.value('f2[1]', 'int') as f2,
 a.n.value('f3[1]', 'int') as f3,
 case when col_length('dbo.TempTable', 'f4') is not null then a.n.value('f4[1]', 'int') else 0 end as f4
from
 (select * from dbo.TempTable for xml path('row'), type) t(x) cross apply
 t.x.nodes('row') a(n);

alter table dbo.TempTable add f4 int;
update top (2) dbo.TempTable set f4 = -1;

select
 a.n.value('f1[1]', 'int') as f1,
 a.n.value('f2[1]', 'int') as f2,
 a.n.value('f3[1]', 'int') as f3,
 case when col_length('dbo.TempTable', 'f4') is not null then a.n.value('f4[1]', 'int') else 0 end as f4
from
 (select * from dbo.TempTable for xml path('row'), type) t(x) cross apply
 t.x.nodes('row') a(n);
go

drop table dbo.TempTable;
go
...
Рейтинг: 0 / 0
Наличие ПОЛЯ в таблице
    #39810261
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm...
Красота!

Посетитель, учись, студент, у маэстро.
...
Рейтинг: 0 / 0
Наличие ПОЛЯ в таблице
    #39810264
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

только, мне кажется, что COL_LENGTH тут и не нужен, если поля не будет, то и элемента не будет.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select
 a.n.value('f1[1]', 'int') as f1,
 a.n.value('f2[1]', 'int') as f2,
 a.n.value('f3[1]', 'int') as f3,
 ISNULL( a.n.value('f4[1]', 'int'), 0 ) as f4
from
 (select * from dbo.TempTable for xml path('row'), type) t(x) cross apply
 t.x.nodes('row') a(n);
...
Рейтинг: 0 / 0
Наличие ПОЛЯ в таблице
    #39810270
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Руслан Дамирович, да щаз. А если элемент есть, но в нем NULL?
...
Рейтинг: 0 / 0
Наличие ПОЛЯ в таблице
    #39810272
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руслан Дамировичтолько, мне кажется, что COL_LENGTH тут и не нужен, если поля не будет, то и элемента не будет.Не будет. Только тогда не различить NULL и отсутствие столбца, ибо при NULL элемента тоже не будет.
...
Рейтинг: 0 / 0
Наличие ПОЛЯ в таблице
    #39810292
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmРуслан Дамировичтолько, мне кажется, что COL_LENGTH тут и не нужен, если поля не будет, то и элемента не будет.Не будет. Только тогда не различить NULL и отсутствие столбца, ибо при NULL элемента тоже не будет.
ELEMENTS XSINIL?
...
Рейтинг: 0 / 0
Наличие ПОЛЯ в таблице
    #39810293
DogBaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посетитель,

авторIF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS ... )
exec('select Field4 from TableName')

Посетитель - спасибо то что нужно (пытался прикрутить через " exec sp_executesql ... ") и

" IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS ... )
select Field4 from TableName
"
...
Рейтинг: 0 / 0
Наличие ПОЛЯ в таблице
    #39810310
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руслан ДамировичELEMENTS XSINIL?Не особо поможет - все равно не различить действительное значение NULL в столбце и отсутствие столбца.
...
Рейтинг: 0 / 0
Наличие ПОЛЯ в таблице
    #39810330
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmРуслан ДамировичELEMENTS XSINIL?Не особо поможет - все равно не различить действительное значение NULL в столбце и отсутствие столбца.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT
  a.n.value('f1[1]', 'int') as f1,
  a.n.value('f2[1]', 'int') as f2,
  a.n.value('f3[1]', 'int') as f3,
  a.n.exist('f4[1]' ) AS b,
  CASE 
    WHEN a.n.exist('f4[1]' ) = 0 THEN 0
    ELSE CONVERT( INT, NULLIF( a.n.value('f4[1]', 'VARCHAR(100)' ), '' ) )
  END as f4
from
 (select * from #TempTable for xml path('row'), type, elements xsinil ) t(x) cross apply
 t.x.nodes('row') a(n);


и все же это возможно...
...
Рейтинг: 0 / 0
Наличие ПОЛЯ в таблице
    #39810341
Диклевич Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
было уже такое:
16946488
...
Рейтинг: 0 / 0
Наличие ПОЛЯ в таблице
    #39810367
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Буквально каждый раз поражаюсь способности местных старожилов понимать и решать любые задачи. Даже самые ненужные идиотские и заведомо архитектурно ошибочные.
Надеюсь я тоже когда-нибудь стану специалистом, знающим как забить презерватив в куницу.
...
Рейтинг: 0 / 0
Наличие ПОЛЯ в таблице
    #39810389
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руслан Дамировичи все же это возможно...Да. Но надо смотреть, что эффективнее.
...
Рейтинг: 0 / 0
Наличие ПОЛЯ в таблице
    #39810578
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PizzaPizzaБуквально каждый раз поражаюсь способности местных старожилов понимать и решать любые задачи. Даже самые ненужные идиотские и заведомо архитектурно ошибочные.
Надеюсь я тоже когда-нибудь стану специалистом, знающим как забить презерватив в куницу.
Я это выразил в первом посте сарказмом.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Наличие ПОЛЯ в таблице
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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