Exécuter une requête SQL uniquement si la condition est remplie

J'essaie d'écrire un script SQL 'idiot proof' qui peut être exécuté par des users non-alphabétisés SQL.

Mon idée est d'avoir quelques variables définies en haut du script, puis d'exécuter des requêtes particulières basées sur ces variables.

Je suis en train de tester sur MySQL, mais il fonctionnera éventuellement sur SQL Server.

En pseudo-code c'est ce que j'essaie de faire:

# Set matchThis to the value to match SET @matchThis = "matchMe"; # Uncomment (remove the #) one of the two lines below to update or just view #SET @update = "YES"; SET @update = "NO"; IF @update = "YES" { UPDATE myTable SET myColumn = "changed" WHERE matchVal = @matchThis; } ELSE { SELECT * FROM myTable WHERE matchVal = @matchThis; } 

Je veux le faire entièrement en SQL s'il y a un moyen.

J'ai vu des guides sur l'utilisation de SELECT IF etc. mais je n'arrive pas à comprendre comment réaliser ce qui précède.

C'est pour MSSQL. Je pense que vous avez tout mais la syntaxe. J'espère que cela aide / fonctionne.

 DECLARE @matchthis AS VARCHAR(MAX) DECLARE @update AS VARCHAR(1) SET @matchthis = 'matchme' --@update can be Y or N. User changes this here. SET @update = 'Y' IF @update = 'Y' UPDATE mytable SET myColumn = 'changed' WHERE matchval = @matchthis ELSE IF @update = 'N' SELECT * FROM myTable WHERE matchval = @matchthis 

Je ne savais pas s'il fallait changer la variable, mais si vous vouliez en faire une variable, suivez la même syntaxe que pour @matchthis (declare et set).

Si vous voulez que cela soit vraiment idiot, je dirais que la meilleure chose à faire est de faire une procédure stockée afin que les users ne voient pas le code, ils ont juste la boîte de saisie.

Il y a deux questions ici. L'une est pourquoi l'instruction IF ne fonctionne pas – parce que T-SQL n'a pas d'accolades. La syntaxe est indiquée dans la documentation .

La question importante est de savoir comment transmettre des parameters au script sans que les users modifient le script lui-même. Ceci est fait en utilisant des variables de script . Lorsqu'un script est exécuté à l'aide de la command sqlcmd , tout text de la forme $(SomeName) est remplacé par des parameters de command line ou des variables d'environnement portant le même nom.

Par exemple, si vous avez le script suivant

 USE AdventureWorks2012; SELECT x.$(ColumnName) FROM Person.Person x WHERE c.BusinessEntityID < 5; 

Cette command l'exécutera avec FirstName comme nom de colonne

 sqlcmd -v ColumnName ="FirstName" -ic:\testscript.sql 

Vous êtes assez optimiste si vous voulez get un script qui fonctionnera de la même manière dans MySQL et SQL Server. Cependant, pour votre script de base, vous pouvez faire ceci:

 -- Set matchThis to the value to match SET @matchThis = 'matchMe'; -- Uncomment (remove the #) one of the two lines below to update or just view -- SET @update = 'YES'; SET @update = 'NO'; UPDATE myTable SET myColumn = 'changed' WHERE matchVal = @matchThis AND @update = 'YES'; SELECT * FROM myTable WHERE matchVal = @matchThis AND @update <> 'YES'; 

C'est légèrement différent de votre script. Ceci exécute réellement le select si @update est 'YES' , mais il ne returnnera aucune ligne.

Deux notes:

  • SQL Server n'utilise pas de guillemets doubles pour les constantes de string.
  • MySQL n'autorise pas les instructions if , sauf dans les programmes stockés.
  • Le mécanisme standard pour commenter une ligne est deux traits d'union ( -- )

Si vous avez besoin d'un script pour T-SQL, vous devez le développer en utilisant T-SQL.