ranio Ответов: 2

Как динамически получить столбцы из соответствующих таблиц в базе данных в SQL?


Я хочу динамически получать столбцы из соответствующих таблиц в базе данных на языке SQL. я могу извлекать столбцы без квадратных скобок. Но мне нужно это сделать, так как есть столбцы с дефисом для нескольких таблиц .

Что я уже пробовал:

Основной код выглядит следующим образом:
select @SourceColumnList = @SourceColumnList + ',' + case when DATA_TYPE = 'xml' then 'convert(varchar(max),'+column_name+')' else column_name end 
from information_schema.columns 
where table_name = @TableName and DATA_TYPE not in ('timestamp') 

select @DestinationColumnList=  @DestinationColumnList+ ',' + column_name 
from information_schema.columns 
where table_name = @TableName and DATA_TYPE not in ('timestamp') 


set @SourceColumnList= RIGHT(@SourceColumnList,Len(@SourceColumnList)-1) 
set @DestinationColumnList= RIGHT(@DestinationColumnList,Len(@DestinationColumnList)-1)


выбирать
set @SourceColumnList


выбирать
set @DestinationColumnList

Maciej Los

Что?

ranio

Я хочу получить столбцы из таблицы, как показано ниже в формате

Я имею в виду сказать

вставить в тест([a].[b],[c])
выберите [a],[b],[c] из abc

все столбцы должны быть заключены в квадратные скобки, как уже упоминалось выше.
мне нужно установить это в динамическом скрипте, показанном ниже:

выберите @SourceColumnList = @SourceColumnList + ',' + случай, когда типу data_type = 'в формате XML", затем " конвертировать(тип varchar(Макс),'+аргумент+')' имя_столбца другого конца
из регулярных выражений.столбцы
где table_name = @TableName и DATA_TYPE not in ('timestamp')

выберите @DestinationColumnList= @DestinationColumnList+ ',' + column_name
из регулярных выражений.столбцы
где table_name = @TableName и DATA_TYPE not in ('timestamp')


set @SourceColumnList= RIGHT(@SourceColumnList,Len(@SourceColumnList)-1)
set @DestinationColumnList= RIGHT(@DestinationColumnList,Len(@DestinationColumnList)-1)

2 Ответов

Рейтинг:
1

RmcbainTheThird

Вот как должен выглядеть ваш sql запрос

INSERT INTO [SOME_TABLE]
           ([Position]
           ,[DisplayText]
           ,[DisplayURL]
           ,[ToolTip])
     VALUES (SELECT Position, DisplayText, Display, URLToolTip
			 FROM  [SOME_OTHER_TABLE]
			 WHERE [Position] = @parent_id)


Значение для предложения where должно быть параметром в вашем коде c#.
SqlParameter param = new SqlParameter
            {
                ParameterName = "@parent_id",
                DbType = DbType.Int32,
                Value = parentID
            }; 


и добавил к вашему объекту SqlCommand вот так

cmd.Parameters.Add(param);


Richard Deeming

Это решение не имеет никакого отношения к вопросу, кроме того факта, что это SQL.

Вы пытались ответить на другой вопрос?

Рейтинг:
0

Eric Lynch

Не уверен, что понял ваш вопрос. Вы ищете способ получить список, разделенный запятыми, или способ добавить скобки?

Может быть, это решит вашу проблему?

DECLARE @TableName varchar(max) = 'Invoices'
DECLARE @ColumnList varchar(max)
SELECT @ColumnList = COALESCE(@ColumnList + ',', '') + '[' + column_name + ']' from information_schema.columns WHERE table_name = @TableName
SELECT @ColumnList