J'ai une base de données SQL Server 2008 R2 Express avec une table. Windows XP.Comment créer un événement/une fonction dans une base de données SQL Server 2008 R2 au lieu de Macros VBA?
J'ai écrit cette macro pour demander la taille de la table et supprimer des lignes si la table est plus grande que nécessaire, j'appelle VBA de SCADA toutes les heures.
Option Explicit
Dim strConn As String
Dim strSQL As String
Dim objConn As Object
Dim objRecSet As Object
Dim Command As Object
Dim objRecSetValue as Double
On Error Resume Next
Err.Number = 0
strConn = "Provider=SQLOLEDB;Data Source=……….."
Set objConn = CreateObject("ADODB.Connection")
objConn.ConnectionString = strConn
objConn.CursorLocation = 3
objConn.Open
Set objRecSet = CreateObject("ADODB.Recordset")
Set Command = CreateObject("ADODB.Command")
Command.CommandType = 1
Set Command.ActiveConnection = objConn
strSQL = "SELECT SUM(a.total_pages) * 8/1024 AS TotalSpaceMB FROM sys.tables t "
strSQL = strSQL & "INNER JOIN sys.indexes i ON t.OBJECT_ID = i.object_id "
strSQL = strSQL & "INNER JOIN sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id "
strSQL = strSQL & "INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id "
strSQL = strSQL & "WHERE t.NAME LIKE 'Statistic' AND i.index_id <= 1 GROUP BY t.NAME "
Command.CommandText = strSQL
Set objRecSet = Command.Execute
objRecSet.MoveFirst
objRecSetValue = objRecSet.Fields(0).Value
objRecSet.Close
If objRecSetValue> 5000 then
strSQL = "delete from dbo.statistic where dateandtime BETWEEN (SELECT MIN(dateandtime) FROM dbo.statistic) AND (SELECT MIN(dateandtime) FROM dbo.statistic) + 1"
Command.CommandText = strSQL
Set objRecSet = Command.Execute
End if
objConn.Close
ErrorHandler1:
Set Command = Nothing
Set objConn = Nothing
Set objRecSet = Nothing
Maintenant, je veux éviter VBA et créer la procédure/fonction dans SQL Server Management Studio (SSMS), appelez avec Windows Sheduler et SQLCMD toutes les 1 heure, mais je ne sais pas T-SQL et la procédure/fonctionne bien. Quelqu'un pourrait-il m'aider à faire le même code en T-SQL? Merci.
Vous avez écrit tout le code SQL. Avec quoi vous battez-vous? Voici un lien sur la façon de créer une procédure (exemples en bas): https://docs.microsoft.com/en-us/sql/relational-databases/stored-procedures/create-a-stored-procedure; Voici un lien sur la façon d'écrire une déclaration «IF»: https://docs.microsoft.com/en-us/sql/t-sql/language-elements/if-else-transact-sql – Alex