Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Задачка  [new]
Местный писатель
Member

Откуда: СССР
Сообщений: 198
Всем привет ...
Как получить список полей у таблицы T1 ,таких что при выборке записи T1.ID = число.
Значение этих полей не были бы NULL - ми ?

Фактически получается , что для каждой записи таблицы T1 свой список полей !
4 апр 05, 18:05    [1439712]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
Smirnov Anton
Member

Откуда: Н.Новгород
Сообщений: 3220
а в каком виде это вам нада получить?
4 апр 05, 18:09    [1439740]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
Glory
Member

Откуда:
Сообщений: 104760
Фактически получается , что для каждой записи таблицы T1 свой список полей !
Это уже что-то противоречащее реляционной теории.
4 апр 05, 18:16    [1439760]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
Местный писатель
Member

Откуда: СССР
Сообщений: 198
Smirnov Anton
а в каком виде это вам нада получить?


да вид любой ,хоть в строке через запятую ...

Glory
Фактически получается , что для каждой записи таблицы T1 свой список полей !
Это уже что-то противоречащее реляционной теории.


это всего лишь результат работы х.п. , просто для каждого разного входного параметра на выходе разные результаты ...

У меня вышло вот что , но боюсь это очень плохо написано ...

DECLARE @SQL nvarchar (4000)
DECLARE	@ColName varchar(250)
DECLARE	@ColVal sql_variant
DECLARE @ColumnsUpd varchar(1000)
DECLARE Cursor_table CURSOR FOR
SELECT	column_name
FROM 	INFORMATION_SCHEMA.COLUMNS  
WHERE 	table_name = 'T1'
OPEN Cursor_table
FETCH NEXT FROM Cursor_table INTO @ColName
WHILE @@FETCH_STATUS = 0
BEGIN
	SET @ColVal = NULL
	SET @SQL = 'SELECT @ColVal = '+@ColName+' FROM T1 WHERE id = 11716'
	EXEC sp_executesql @SQL, N'@ColVal sql_variant out', @ColVal = @ColVal out
	IF (@ColVal IS NOT NULL)
		SET @ColumnsUpd = ISNULL(@ColumnsUpd,'') + @ColName + ','
	FETCH NEXT FROM Cursor_table INTO @ColName
END
CLOSE Cursor_table
DEALLOCATE Cursor_table

SELECT ColumnsUpd = @ColumnsUpd
4 апр 05, 18:24    [1439800]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
Bagin
Member

Откуда:
Сообщений: 838
Посмотрите https://www.sql.ru/forum/actualthread.aspx?tid=173124, ихмо, схожие задачи.
4 апр 05, 18:27    [1439809]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
Glory
Member

Откуда:
Сообщений: 104760
это всего лишь результат работы х.п. , просто для каждого разного входного параметра на выходе разные результаты ...
Разные выходные наборы это я понимаю
но "свой список полей для каждой записи таблицы T1 - это боюсь нет
4 апр 05, 18:30    [1439821]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
Местный писатель
Member

Откуда: СССР
Сообщений: 198
Glory
Разные выходные наборы это я понимаю
но "свой список полей для каждой записи таблицы T1 - это боюсь нет


Окей, я написал кривовато , пусть будет: Разные выходные наборы ..
4 апр 05, 18:34    [1439835]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
Smirnov Anton
Member

Откуда: Н.Новгород
Сообщений: 3220
create table T1(i1 int,i2 int, i3 int)
go
insert into T1
select 1,1,1 union all
select null,2,2 union all
select null,null,3 union all
select 4,null,4 union all
select 5,null,null
go
declare @columns varchar(200),@sql varchar(500)
set @columns=''
select @columns=@columns+'case when '+COLUMN_NAME+' is not null then '''+COLUMN_NAME+''' else ''null'' end+'',''+'
 from INFORMATION_SCHEMA.COLUMNS  
   WHERE 	table_name = 'T1'
set @columns=left(@columns,len(@columns)-5)
set @sql='select '+@columns+' from T1'
exec(@sql)
go
drop table T1
5 апр 05, 08:45    [1440399]     Ответить | Цитировать Сообщить модератору
 Re: Задачка  [new]
Местный писатель
Member

Откуда: СССР
Сообщений: 198
Smirnov Anton
Спасибо !
5 апр 05, 10:26    [1440730]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить