Procédure stockée pour choisir entre les dates?
Je suis en train d'écrire une procédure stockée à Sélectionner les informations, je voudrais qu'à choisir entre les dates?
C'est à quoi il ressemble maintenant:
ALTER PROCEDURE [dbo].[AutoCompleate]
@DateFrom datetime,
@DateTo datetime,
@SearchField varchar(50)
AS
-- V1.0 : ShaunM : 15 jun 2012
-- AutoComplete textbox
exec ('
SELECT DISTINCT ' +
@SearchField + ' FROM SchemaAudit
ORDER BY ' + @SearchField +' ASC')
Je veux le sélectionner pour l'entrée dans la base de données entre @DateTo et DateFrom, quelqu'un sait comment faire cela?
- Il serait utile si vous posté la structure de la table pour SchemaAudit
Vous devez vous connecter pour publier un commentaire.
Au lieu de exec vous devriez être en utilisant sp_executesql qui permet l'utilisation de paramètres, ce qui évite les risques d'injection Sql, et éviter d'éventuels problèmes avec les dates passées comme des chaînes de caractères. Premier paramètre est une requête, la seconde est une liste de paramètres et leurs types et le reste sont des valeurs de paramètre.
Maintenant, à propos de début et date de fin, exactement ce que vous voulez faire?
I would like it to do something like:
Utilisation ENTRE
EDIT: Comme Nalaka526 souligné, j'ai raté la date de fin,
Vous ne pouvez pas utiliser ENTRE deux champs, Vous devez le convertir en varchar et l'utilisation >= et <= pour comparer entre la plage. Curt solution est de le faire.
exec (' SELECT DISTINCT ' + @SearchField + ' FROM SchemaAudit WHERE StartDate >= ' +Convert(varchar(20), @DateFrom) + 'AND WHERE EndDate >= ' + Convert(varchar(20),@DateTo) + ' ORDER BY ' + @SearchField +' ASC')
Vous devez
CAST
les paramètres de date commevarchar
:En ignorant le fait que cette technique pourrait vous laisser vulnérable à une attaque par injection SQL, vous devez utiliser
Convert
pour convertir la date varchar