Как выбрать в таблице B, имя которого @tableB * FROM @tableA? - PullRequest
2 голосов
/ 04 декабря 2010

Я создаю хранимую процедуру, которая должна создать таблицу, имя которой зависит от входной переменной. Для временных результатов я объявил переменную таблицы:

declare @tableA TABLE(
column1,
column2,
..
)

Имя выходной таблицы зависит от ввода пользователя, поэтому я объявил другую переменную

declare @tableB varchar = ...

В конце временные результаты должны быть сохранены в таблицу с именем @tableB, поэтому в хранимой процедуре я попытался написать следующее утверждение:

declare @sql varchar(max)
set @sql = 'SELECT * INTO ' + @tableB + ' FROM @tableA'
exec(@sql)

что не правильно. Кто-нибудь знает, как вставить значения из табличной переменной в таблицу, имя которой является переменной?

Ответы [ 2 ]

1 голос
/ 04 декабря 2010

Вы не можете использовать переменные таблицы здесь, попробуйте использовать временные таблицы.создать таблицу #tableA (...

Для получения дополнительной информации: текст ссылки

создать таблицу #A (c1 int, c2 int);

вставка в значения #A (1,2);

вставка в значения #A (3,4);

объявление @sql varchar (max);

объявляют @tableB sysname = '## tableB';

set @sql = 'SELECT * INTO' + @tableB + 'FROM #A';

Print @sql;

exec (@sql);

go

select * from ## tableB;

0 голосов
/ 04 декабря 2010

Предполагая, что @tableB уже существует, первое предположение будет попытаться:

SET @sql =
    'INSERT
    (
        col1,
        col2
    )
    INTO ' + @tableB + ' 
    SELECT 
    (
        col1, 
        col2
    )
    FROM
        @tableA'

Это не проверяется синтаксисом, так что будьте осторожны!

Если @tableB не существует, почему его имя должно исходить от пользователя?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...