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



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

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

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

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

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

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

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


IF EXISTS SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS ...

или как iap
...
Рейтинг: 0 / 0
06.05.2019, 14:28
    #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
06.05.2019, 14:31
    #39810226
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наличие ПОЛЯ в таблице
Посетитель,

а, ну да
...
Рейтинг: 0 / 0
06.05.2019, 14:33
    #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
06.05.2019, 14:36
    #39810233
Посетитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наличие ПОЛЯ в таблице
Руслан ДамировичПосетитель,
ты от вопрос ТС не уходи.


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


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

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

Ничего, батенька, оно с возрастом придет. Доживете-ль-с?
...
Рейтинг: 0 / 0
06.05.2019, 14:50
    #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
06.05.2019, 15:23
    #39810261
Руслан Дамирович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наличие ПОЛЯ в таблице
invm...
Красота!

Посетитель, учись, студент, у маэстро.
...
Рейтинг: 0 / 0
06.05.2019, 15:27
    #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
06.05.2019, 15:41
    #39810270
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наличие ПОЛЯ в таблице
Руслан Дамирович, да щаз. А если элемент есть, но в нем NULL?
...
Рейтинг: 0 / 0
06.05.2019, 15:43
    #39810272
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наличие ПОЛЯ в таблице
Руслан Дамировичтолько, мне кажется, что COL_LENGTH тут и не нужен, если поля не будет, то и элемента не будет.Не будет. Только тогда не различить NULL и отсутствие столбца, ибо при NULL элемента тоже не будет.
...
Рейтинг: 0 / 0
06.05.2019, 16:10
    #39810292
Руслан Дамирович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наличие ПОЛЯ в таблице
invmРуслан Дамировичтолько, мне кажется, что COL_LENGTH тут и не нужен, если поля не будет, то и элемента не будет.Не будет. Только тогда не различить NULL и отсутствие столбца, ибо при NULL элемента тоже не будет.
ELEMENTS XSINIL?
...
Рейтинг: 0 / 0
06.05.2019, 16:14
    #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
06.05.2019, 16:49
    #39810310
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наличие ПОЛЯ в таблице
Руслан ДамировичELEMENTS XSINIL?Не особо поможет - все равно не различить действительное значение NULL в столбце и отсутствие столбца.
...
Рейтинг: 0 / 0
06.05.2019, 17:30
    #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
06.05.2019, 17:41
    #39810341
Диклевич Александр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наличие ПОЛЯ в таблице
было уже такое:
16946488
...
Рейтинг: 0 / 0
06.05.2019, 18:19
    #39810367
PizzaPizza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наличие ПОЛЯ в таблице
Буквально каждый раз поражаюсь способности местных старожилов понимать и решать любые задачи. Даже самые ненужные идиотские и заведомо архитектурно ошибочные.
Надеюсь я тоже когда-нибудь стану специалистом, знающим как забить презерватив в куницу.
...
Рейтинг: 0 / 0
06.05.2019, 18:57
    #39810389
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наличие ПОЛЯ в таблице
Руслан Дамировичи все же это возможно...Да. Но надо смотреть, что эффективнее.
...
Рейтинг: 0 / 0
07.05.2019, 10:32
    #39810578
Руслан Дамирович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наличие ПОЛЯ в таблице
PizzaPizzaБуквально каждый раз поражаюсь способности местных старожилов понимать и решать любые задачи. Даже самые ненужные идиотские и заведомо архитектурно ошибочные.
Надеюсь я тоже когда-нибудь стану специалистом, знающим как забить презерватив в куницу.
Я это выразил в первом посте сарказмом.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Наличие ПОЛЯ в таблице / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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