我知道这是不可能的,但有什么可行吗?基本上我希望where语句是动态的,允许我传递任何字符串,它将能够搜索。
Declare @search varchar(80)
set @search = 'RegionID'
Select * from TBL_TripDetails
Where @search = '1'
感谢您的回答。在阅读了几篇文档之后,我决定使用多个select语句而不是使用动态sql。谢谢!
答案 0 :(得分:5)
declare @sql nvarchar(max);
set @sql = N'select * from table where ' + quotename(@search) + N'=''1''';
exec sp_executesql @sql;
答案 1 :(得分:2)
确实有可能,尽管经常不赞成。 看看sp_executesql
答案 2 :(得分:1)
Declare @search varchar(80)
set @search = 'RegionID'
declare @query varchar(max)
set @query = "Select * from TBL_TripDetails Where " + @search + " = '1'"
exec @query
答案 3 :(得分:1)
DECLARE @search VARCHAR(80)
DECLARE @SQL VARCHAR(8000)
SET @search = 'RegionID'
SET @SQL = 'SELECT * FROM TBL_TripDetails WHERE ' + @search + ' = 1'
EXEC @SQL
但要小心。连接SQL可以允许SQL注入攻击。
答案 4 :(得分:1)
我对你的问题“传递任何字符串,它将能够搜索”有点困惑。在您的示例中,您传入的字段与硬编码值1进行比较,这与您的描述不符。
如果这是您想要的,那么您将需要使用动态SQL。如果您只是希望能够支持可选搜索条件/参数(例如,如果RegionID具有值集,则应用条件,否则忽略条件),然后使用下面的示例。
DECLARE @RegionID AS VARCHAR(1);
SELECT *
FROM TABLE
WHERE (@RegionID Is Null OR @RegionID = '' OR RegionID = @RegionID);
现在,如果@RegionID为空或NULL,则不会在条件中使用。