Я пытаюсь создать таблицу с помощью sp_executesql, но я продолжаю получать сообщение об ошибке «Неверный синтаксис рядом с« @_TableName ». Любая идея, что я делаю здесь неправильно?Как передать переменную таблицы с помощью sp_executesql
Вот код, который я использую:
DECLARE @SQLString NVARCHAR(MAX),
@ParamDefinition NVARCHAR(MAX),
@TableName NVARCHAR(MAX);
SET @TableName = N'[dbo].[MyTable]';
SET @SQLString = N'SELECT * FROM @_TableName;';
SET @ParamDefinition = N'@_TableName NVARCHAR(max)';
EXEC sp_executesql @SQLString, @ParamDefinition,
@_TableName = @TableName;
Это дает ошибку:
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '@_TableName'.
Если я жесткий код имя таблицы и тип столбца (я должен сделать то и другое), то запрос работает, иначе Я получаю неверное синтаксическое сообщение для обеих переменных.
В случае, если вам интересно, я хочу поместить этот код в хранимую процедуру, чтобы, если кто-то хочет создать или изменить таблицу, они вызывают эту хранимую процедуру, которая может выполнять дополнительные проверки.
К сожалению, это делает вас уязвимыми для атак SQL Injection, если @TableName исходит из пользовательского ввода. В этом ответе объясняется, как обратиться к этому: http://stackoverflow.com/a/1246848/109122 – RBarryYoung