Не удалось использовать оператор TRUNCATEion - PullRequest
0 голосов
/ 20 июня 2019

Я хочу обрезать таблицу, используя полное имя.т.е. DatabaseName.SchemaName.TableName с использованием переменных в SQL Server.

Рассмотрим следующий пример:

DECLARE @destDatabaseName VARCHAR(50); 
DECLARE @destSchemaName VARCHAR(50) ; 

SET @destDatabaseName = 'Database_Name' ;
SET @destSchemaName = 'Schema_Name' ;

TRUNCATE TABLE [@destDatabaseName].[@destSchemaName].[Application] ;

Это дает мне следующую ошибку.

Msg2702, уровень 16, состояние 2, строка 25База данных '@destDatabaseName' не существует.

1 Ответ

1 голос
/ 20 июня 2019

Вы не можете использовать переменную для представления объекта. Например, если у вас есть заявление:

DECLARE @Var sysname = N'MyColumn';

SELECT @Var
FROM MyTable;

Вы не получите оператор со значениями из MyColumn, вы получите набор данных, который повторяет буквальную строку N'MyColumn'. Для этого вам нужно использовать динамический SQL:

--SQL Server uses sysname (nvarchar(128)) for object names, so I've changed the datatype here
DECLARE @destDatabaseName sysname; 
DECLARE @destSchemaName sysname; 
DECLARE @SQL nvarchar(MAX);

SET @destDatabaseName = N'Database_Name';
SET @destSchemaName = N'Schema_Name';

SET @SQL = N'USE ' + QUOTENAME(@destDatabaseName) + N';' + NCHAR(13) + NCHAR(10) + 
           N'TRUNCATE TABLE ' + QUOTENAME(@destSchemaName) + N'.[Application];';

EXEC sp_executesql @SQL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...