Ваш вопрос не очень понятен ... Похоже, вы знаете, что подход с значениями с именами имен таблиц является плохим.Но вы сказали нам, что вы должны придерживаться этого стороннего инструмента.Ну, дерьмо случается; -)
Ваш код должен работать, но, вероятно, вы не все показываете и / или пытаетесь сократить его для краткости (что здорово!), Но - возможно - вы сократилиошибка исчезла ...
Попробуйте это:
USE master;
GO
CREATE DATABASE testTbWithDate; --Some extra database to create tables
GO
USE testTbWithDate;
GO
CREATE TABLE SomeName_20190701(ID INT,SomeValue VARCHAR(100));
GO
CREATE TABLE SomeName_20190630(ID INT,SomeValue VARCHAR(100));
GO
--test values
INSERT INTO SomeName_20190630 VALUES(1,'this is 30th of June');
INSERT INTO SomeName_20190701 VALUES(1,'this is 1st of July');
GO
- Здесь начинается запрос
--You should always use (n)varchar together with a length parameter
--And you should not keep your length to small...
Declare @Tname varchar(50) = --<-- 50 might be not enough...
'SomeName_' + (Select convert(varchar(8), {d'2019-07-01'}, 112)); --I added "(8)"
Declare @Q varchar(max); --This was pretty small, I use "(max)"
Set @Q = 'Select * From ' + QUOTENAME(@Tname); --I use QOUTENAME to avoid invalid names and help (a little bit) against SQL injection
PRINT @Q; --always print out your command. Now you can copy and paste it into a query window and check the syntax.
Exec(@Q); --the execution
- Очистка
GO
USE master;
GO
DROP DATABASE testTbWithDate;