Сделайте Печать a Выбрать, затем Вставьте в (таблица с таким же определением столбца).Создайте таблицу с одинаковыми столбцами в том же порядке.Затем поместите вставку в вашу таблицу (ваши столбцы в том же порядке, что и выходные данные exec (). Любое изменение в столбцах таблицы в будущем может нарушить это. Таблица и запрос должны иметь одинаковые столбцы. Если вы осторожны и контролируетепорядок столбцов в операциях выбора и вставки, это не должно иметь значения для порядка столбцов таблицы, но это хорошая практика imho.
Пример (вставка в таблицу с динамическим sql)
if object_id('dbo.ColumnMatch','U') is not null drop table dbo.ColumnMatch;
create table dbo.ColumnMatch (
id int identity(1,1) not null primary key
,column_name varchar(512)
);
declare @col varchar(256) = 'This Column Name'
declare @s varchar(max) = 'select ''' + @col + '''';
insert into ColumnMatch (column_name)
exec(@s);
select * from ColumnMatch;
Не печатать, но выбрать и исправить оператор Insert Into.:)
if object_id('dbo.ColumnMatch','U') is not null drop table dbo.ColumnMatch;
create table dbo.ColumnMatch (
id int identity(1,1) not null primary key
,column_name varchar(512)
);
declare @col varchar(255), @cmd varchar(max)
DECLARE getinfo cursor for
SELECT c.name FROM sys.tables t JOIN sys.columns c ON t.Object_ID =
c.Object_ID
WHERE t.Name = 'Account'
OPEN getinfo
FETCH NEXT FROM getinfo into @col
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @cmd = 'IF NOT EXISTS (SELECT top 1 * FROM Account WHERE [' + @col +
'] IS NOT NULL) BEGIN select ''' + @col + ''' column_name end'
Insert into ColumnMatch (column_name)
EXEC(@cmd)
FETCH NEXT FROM getinfo into @col
END
CLOSE getinfo
DEALLOCATE getinfo
select * from ColumnMatch;