Хранимые процедуры SQL Server для копирования таблиц - PullRequest
0 голосов
/ 02 января 2012

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

Синтаксис:

alter procedure [dbo].[moving]
(
    @to_table varchar(50),
    @from_table varchar(50)
)
as
begin
    EXEC('Select * into '+@to_table+'from '+@from_table)
end 

при выполнении с помощью.

exec moving newtable,hello

Выдает ошибку:

Неверный синтаксис рядом с 'hello'

Пожалуйста, кто-нибудь даст решение для этого

Ответы [ 4 ]

3 голосов
/ 02 января 2012

Попробуйте:

exec moving 'newtable','hello'

Выглядит так, как будто вам нужно починить SP. Вам понадобится пробел до:

EXEC('Select * into '+@to_table+' from '+@from_table)
1 голос
/ 02 января 2012

SELECT ... INTO необходимо создать таблицу, если таблица существует, используйте INSERT INTO ... SELECT ..FROM

И

, в вашем случае вам нужно запустить SP следующим образом:

EXEC dbo.moving 'table1', 'table2'

НО

EXEC('Select * into '+@to_table+' from '+@from_table)

не будет работать, вам нужно переписать его с переменной:

declare @sql nvarchar(max)
SET @sql = N'Select * into ['+@to_table+N'] from ['+@from_table+N']'
EXEC(@sql)

НО

вам также нужно беспокоиться о инъекциях sql и именах сложных таблиц по крайней мере , поэтому - для сложных имен таблиц я ужеобрамляйте свои таблицы квадратными скобками, и вам нужно что-то сделать, чтобы предотвратить инъекции sql.

И еще раз - SELECT...INTO работает, только если вы создаете новую таблицу с именем из @to_tableпараметр

1 голос
/ 02 января 2012

Считать ВЫПОЛНИТЬ синтаксис и попробовать,

EXEC moving 'newtable','hello'
0 голосов
/ 02 января 2012

добавить дополнительный пробел после одинарной кавычки и ОТ

EXEC('Select * into ' + @to_table + ' from ' + @from_table)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...