我知道这是不可能的,但有没有什么方法可以实现?基本上,我想让where语句是动态的,允许我传递任何字符串,它将能够搜索。
Declare @search varchar(80)
set @search = 'RegionID'
Select * from TBL_TripDetails
Where @search = '1'
感谢您的回答。在阅读了一些文档后,我决定使用多个选择语句而不是动态SQL。谢谢!
我知道这是不可能的,但有没有什么方法可以实现?基本上,我想让where语句是动态的,允许我传递任何字符串,它将能够搜索。
Declare @search varchar(80)
set @search = 'RegionID'
Select * from TBL_TripDetails
Where @search = '1'
感谢您的回答。在阅读了一些文档后,我决定使用多个选择语句而不是动态SQL。谢谢!
declare @sql nvarchar(max);
set @sql = N'select * from table where ' + quotename(@search) + N'=''1''';
exec sp_executesql @sql;
请参阅动态SQL的诅咒和祝福
DECLARE @search VARCHAR(80)
DECLARE @SQL VARCHAR(8000)
SET @search = 'RegionID'
SET @SQL = 'SELECT * FROM TBL_TripDetails WHERE ' + @search + ' = 1'
EXEC @SQL
不过要小心。连接 SQL 可能会导致 SQL 注入攻击。
我对你的问题“传递任何字符串,它将能够搜索”有点困惑。在你的例子中,你传递了一个字段,该字段正在与硬编码值1进行比较,这实际上并不符合你的描述。
如果这确实是你想要的,那么你需要使用动态SQL。如果你只想支持可选的搜索条件/参数(例如,如果RegionID有一个设置值,则应用条件,否则忽略条件),那么请使用下面的示例。
DECLARE @RegionID AS VARCHAR(1);
SELECT *
FROM TABLE
WHERE (@RegionID Is Null OR @RegionID = '' OR RegionID = @RegionID);
Declare @search varchar(80)
set @search = 'RegionID'
declare @query varchar(max)
set @query = "Select * from TBL_TripDetails Where " + @search + " = '1'"
exec @query