我希望能够将一个参数传递给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以及如何减轻它带来的问题。