Я немного коснулся этого в своих комментариях, но я также опубликую ответ здесь.
Параметризация (на мой взгляд) - это всегда путь, поскольку он обеспечивает "«безопасность» вашего запроса (его гораздо сложнее / невозможно ввести в параметризованный запрос), а также позволяет повторно использовать планы запросов, что также может принести большую пользу.
Для того, что у вас есть здесь, однако,Вы не можете параметризовать свой SQL так, как вы ожидаете.Переменная не может заменить имя объекта ( db <> fiddle ).Для этого вам нужен динамический SQL.
Я не собираюсь притворяться, что знаю C #, но я не знаю, что у вас есть, это означало бы, что у вас есть запрос в духе «чего-то», например:
using (SqlCommand command = new SqlCommand(@"DECLARE @SQL nvarchar(MAX) = N'SELECT * FROM ' + QUOTENAME(@table) + N';'; EXEC sp_executesql @SQL;", connection))
{
command.Parameters.AddWithValue("@table", table_name);
Честно говоря, я понятия не имею, работает ли это в C # таким образом, но именно так вы бы параметризовали динамический объект в (очень) простых терминах.