j'ai une fonction dans un module vba d'une application Access
Après une migration sur MS SQL SERVER 2005, je souhaiterai implémenter la même fonction en T-SQL.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 Public Function F_LCT_I(p_table As String, p_cmp_cln As String, _ p_res_cln As String, p_entree As String) As Integer 'Fonction (getter) de lecture 'p_table : nom de table 'p_cmp_cln : nom de colonne de comparaison 'p_res_cln : nom de colonne du résultat 'p_entree : paramètre de comparaison On Error GoTo errhandler 'Déclaration de variables Dim rs As Recordset 'Test de nullité du paramètre en entrée If IsNull(p_entree) = True Then F_LCT_I = "" Exit Function End If 'Ouverture du RecordSet Set rs = CurrentDb.OpenRecordset("SELECT " & p_res_cln _ & " FROM " & p_table _ & " WHERE " & p_cmp_cln & "='" & p_entree & "'") 'Récupération de la donnée et affectation F_LCT_I = rs.Fields(0).Value 'Fermeture du Recordset rs.Close Set rs = Nothing Exit Function errhandler: 'Traitement des exceptions With Err MsgBox "Error " & .Number & vbCrLf & .Description, _ vbOKOnly Or vbCritical, p_table End With End Function
En consultant la documentation, j'apprends que du SQL dynamique peut être peut être passé à une procédure stockée intégrée sp_executesql. Mais que celle-ci:
1. ne peut pas être utilisée dans une fonction UDF.
2. on ne peut pas lui passer le nom d'une table en paramètre
Est-il possible d'implémenter cette fonction en T-SQL?You may wonder why I do not pass @tbl as a parameter as well. The answer is that you can't. Dynamic SQL is just like any other SQL. You can't specify a table name through a variable in T-SQL, that's the whole story. Thus, when you need to specify things like table names, column names etc dynamically, you must interpolate them into the string.
source: http://www.sommarskog.se/dynamic_sql.html
Merci d'avance.
Partager