J'ai une instruction sélectionnée qui a où em> condition générée en fonction du paramètre entrant. ` J'ai exécuté la déclaration et les erreurs suivantes sont disponibles p> Syntaxe incorrecte près de "prospérer" .. p>
blockQuote> Quelqu'un peut-il verser une lumière ce que je suis manquant dans le suivant P> après la suggestion et les modifications effectuées, vous trouverez ci-après la délégation de sélection disponible à Execute P> Sélectionnez LoansecurityId de Loansecurity Où Accountreferencenumber = @accountreferencenumber et StreetAddress1 = 15 Prosper Court and Suburb = Wodonga et Postcode = 1245 P>
blockQuote> la chaîne INS La whéréclause ne vient pas correctement p> p>
4 Réponses :
Votre ne peut pas simplement ajouter une chaîne à votre requête où code> clause. Vous devez utiliser Dynamic SQL SET @sql = 'SELECT LoanSecurityId FROM LoanSecurity WHERE AccountReferenceNumber = @AccountReferenceNumber'
+ @WhereClause
EXEC sp_executesql @sql, N'@AccountReferenceNumber int', @AccountReferenceNumber
Lorsque vous avez la valeur INT, vous devez utiliser moulage (@param comme nvarchar (n)) code>
Par exemple:
Pour votre nouveau problème, utilisez '' (deux citations simples) avant et après la valeur de la chaîne
Après avoir réglé la chaîne d'entrée et le changement de code suivant, il fonctionne
DECLARE @ApplicationNumber int = 0;
DECLARE @AccountReferenceNumber int;
set @AccountReferenceNumber= 820829;
DECLARE @SecurityNumber int = 1;
DECLARE @StreetAddress1 varchar(250)= '''15 prprpCourt''';
DECLARE @StreetAddress2 varchar(250) = NULL;
DECLARE @Suburb varchar(250)= '''tester''';
DECLARE @State varchar(250) = NULL;
DECLARE @Postcode varchar(250) = '''5589''';
DECLARE @IsDeleted bit = 0;
DECLARE @IsClass bit = 1;
declare @BaseQuery nvarchar(max) = N'SELECT LoanSecurityId
FROM LoanSecurity WHERE AccountReferenceNumber = ';
IF @IsClass = 1
DECLARE @tableid INT = 0;
DECLARE @WhereClause VARCHAR(max) = '';
SET @WhereClause = @AccountReferenceNumber ;
IF @StreetAddress1 IS NOT NULL
BEGIN
SET @WhereClause = @WhereClause + ' AND StreetAddress1 = ' + @StreetAddress1;
END
IF @StreetAddress2 IS NOT NULL
BEGIN
SET @WhereClause = @WhereClause
+ ' AND StreetAddress2 = ' + @StreetAddress2;
END
IF @Suburb IS NOT NULL
BEGIN
SET @WhereClause = @WhereClause + ' AND Suburb= ' + @Suburb;
END
IF @Postcode IS NOT NULL
BEGIN
SET @WhereClause = @WhereClause + ' AND Postcode= ' + @Postcode;
END
SET @BaseQuery = @BaseQuery + @WhereClause;
-- SELECT @BaseQuery
execute sp_executesql @BaseQuery;
Cela aurait été meilleur si vous aviez ajouté les citations supplémentaires dans les définitions de la clause WHERE plutôt qu'au niveau de la variable, comme vous ne pouvez pas vous attendre à une personne saisissant les valeurs variables pour vous ajouter de citations supplémentaires pour vous. En tant que développeur, ce serait votre travail;) Vous envisagez également de prélever la réponse que la réponse vous a donné l'indice plutôt que de fournir et d'accepter votre propre réponse.
Vous utilisez mal SQL si vous construisez de manière dynamique vos déclarations SQL. Il n'y a que des cas de bord rares où cela est nécessaire, généralement lorsque le nom de la table ou de la vue est inconnu au moment de l'exécution.
Vous pouvez effectuer votre requête sans construire l'instruction SQL de manière dynamique à l'aide de ps ... Votre performance d'exécution sera généralement beaucoup mieux si vous utilisez SQL natif au lieu de créer une instruction SQL à la volée. P> P> isnull code> à votre avantage. p>