无法使用TRUNCATEion语句

时间:2019-06-19 21:44:31

标签: sql-server

我想使用完整名称截断表。即使用SQL Server中的变量的DatabaseName.SchemaName.TableName。

考虑以下示例:

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

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

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

这给了我以下错误。

  

消息2702,级别16,状态2,第25行
数据库'@destDatabaseName'可以   不存在。

1 个答案:

答案 0 :(得分:1)

您不能使用变量来表示对象。例如,如果您有以下语句:

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;