在from语句中使用String变量



我希望能够将一个参数传递给Query,以给出我正在使用的表的名称。

DECLARE @ImportedTable char(100) 
DECLARE @EnvTable char(100) 
SET @ImportedTable = 'tmpImported'
SET @EnvTable = 'tblDestination'
PRINT @ImportedTable
Select *
From @ImportedTable

当我打印变量时,它看起来很好,但当我运行整个过程时,From子句会给出以下错误

必须声明表变量"@ImportedTable";。

为什么它看不到From子句中的可变内容?

如上所述,您需要动态SQL。类似于:

Declare @EnvTable sysname;
Declare @sql nvarchar(max);
Set @ImportedTAble = 'tmpImported'
Set @EnvTable = 'tblDestination'
Set @sql = N'Select * From ' + QUOTENAME(@ImportedTable);
Exec sp_executesql @sql;

不过,DynamicsSQL确实给代码带来了问题,包括SQL注入、不使用查询计划等等。因此,一定要阅读动态sql以及如何减轻它带来的问题。

最新更新