我想使用完整名称截断表。即使用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'可以 不存在。
答案 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;