Если вы уверены, что с именами таблиц и столбцов все в порядке, вы можете выполнить некоторые проверки безопасности в базе данных, прежде чем создавать динамический SQL.
Это только для иллюстрации - для реальной жизни, очевидно, вам нужно сделать это намного чище:
declare @TABLE_NAME nvarchar(128)
set @TABLE_NAME = 'Robert'');DROP TABLE Students;--' -- This line will raise an error
set @TABLE_NAME = 'BOOK' -- This line will go through properly
declare @sql varchar(max)
set @sql = 'SELECT * FROM '
if exists (select 1 from sys.objects where type = 'U' and name = @TABLE_NAME)
begin
set @sql = @sql + @TABLE_NAME
exec (@sql)
end
else
begin
raiserror ('ERROR ERROR ERROR', 0, 0)
return
end