2010-08-06 4 views
3

Je sais que ce n'est pas possible, mais y a-t-il quelque chose qui fonctionnerait? Fondamentalement, je veux que l'instruction where soit dynamique, ce qui me permet de lui passer n'importe quelle chaîne, sur laquelle elle pourra chercher.T-SQL créant une instruction dynamique where?

Declare @search varchar(80) 
set @search = 'RegionID' 

Select * from TBL_TripDetails 
Where @search = '1' 

Nous vous remercions de vos réponses. Après avoir lu quelques documents, j'ai décidé d'utiliser plusieurs instructions select au lieu d'utiliser SQL dynamique. Merci!

Répondre

5
declare @sql nvarchar(max); 
set @sql = N'select * from table where ' + quotename(@search) + N'=''1'''; 
exec sp_executesql @sql; 

Voir The Curse and Blessings of Dynamic SQL

+0

merci! travaux! – Spooks

+4

si à la réflexion, Ill peut-être simplement utiliser plusieurs déclarations select, le risque ne vaut pas la récompense – Spooks

1
Declare @search varchar(80) 
set @search = 'RegionID' 

declare @query varchar(max) 
set @query = "Select * from TBL_TripDetails Where " + @search + " = '1'" 
exec @query 
1
DECLARE @search VARCHAR(80) 
DECLARE @SQL VARCHAR(8000) 

SET @search = 'RegionID' 

SET @SQL = 'SELECT * FROM TBL_TripDetails WHERE ' + @search + ' = 1' 
EXEC @SQL 

Attention cependant. La concaténation de SQL peut permettre des attaques par injection SQL.

1

Je suis un peu confus avec votre question "passez-lui n'importe quelle chaîne, qu'il sera capable de rechercher". Dans votre exemple de passage dans un champ qui est comparé à une valeur codée en dur de 1, cela ne correspond pas vraiment à votre description.

Si c'est vraiment ce que vous vouliez, vous devrez utiliser Dynamic SQL. Si vous souhaitez simplement pouvoir prendre en charge des critères/paramètres de recherche facultatifs (par exemple, si RegionID a une valeur définie, appliquez des critères, sinon ignorez les critères), puis utilisez l'exemple ci-dessous. Maintenant, si @RegionID est vide ou NULL, il ne sera plus utilisé dans les critères.

Questions connexes