Eliminare il contenuto di tutte le tabelle di un database Access

A volte è necessario svuotare completamente il database senza perdere la struttura del database stesso.

In caso il database contenga molte tabelle farlo a mano è operazione lunga oppure  è necessario automatizzare l'operazione, in questi casi è sufficiente creare un modulo in VBA ed eseguirlo.

Creare un nuovo modulo VBA come segue.

Sub Svuota ()

Dim Dbs As Database
Dim tbl As TableDef

Set Dbs = CurrentDb

For Each tbl In Dbs.TableDefs
  If Mid(tbl.Name, 1, 4) <> "MSys" Then
     DoCmd.RunSQL "Delete from " & tbl.Name
  End If
Next tbl

 

End Sub

All'esecuzione verranno ciclate e svuotate tutte le tabelle contenute nel database.

E' importante che venga mantenuta questa parte :   If Mid(tbl.Name, 1, 4) <> "MSys" Then , altrimenti verranno cancellate anche le tabelle di sistema, corrompendo ll DB.

Verrà chiesta conferma di eliminazione per ogni tabella, per ovviare ciò è sufficiente non visualizzare gli avvisi di conferma di access.

Esecuzione comando DOS da SQL Server

Per eseguire un comando MS-DOS da SQL Server procedere come segue :


DECLARE @Command as nvarchar (250)

SET @Command = 'Comando MS-DOS'

EXEC XP_CMDSHELL @Command

 

Articolo originale: http://community.ugiss.org/blogs/superzani3/archive/2009/05/18/esecuzione-comando-dos-con-sql-server-script.aspx

 

 

 


Ricordarsi d'avere 1 nell'opzione XP_CMDSHELL, per verificare questo valore e

successivamente impostarlo a 1 nel caso fosse a 0, procedere come segue :


-- Visualizza l'opzione xp_cmdshell

EXEC sp_configure 'show advanced options',1

RECONFIGURE
GO

sp_configure 'xp_cmdshell'
GO


-- Impostazione del valore a 1

EXEC sp_configure 'xp_cmdshell',1

RECONFIGURE
GO

 

Concatenare record in MSSQL (2)

Concatenare Record di una tabella di questo tipo:
> ID NUMERO
> AG120858 33367890
> AG120858 03456789
> FR231267 4535678
> ML190245 980345678
> ML190245 54785678
>
Per ottenere questo risultato procedere con la sintassi
> ID NUMERO
> AG120858 33367890 - 03456789
> FR231267 4535678
> ML190245 980345678 - 54785678

USE tempdb
GO

/* Definisco la tabella dbo.myTable */
CREATE TABLE dbo.myTable(
[ID] char(8) NOT NULL,
Numero varchar(10) NOT NULL
)
GO

/* La popolo */
INSERT dbo.myTable VALUES('AG120858', '33367890')
INSERT dbo.myTable VALUES('AG120858', '03456789')
INSERT dbo.myTable VALUES('FR231267', '4535678')
INSERT dbo.myTable VALUES('ML190245', '980345678')
INSERT dbo.myTable VALUES('ML190245', '54785678')
GO

/* Definisco la UDF dbo.ufn_Concatena */
CREATE FUNCTION dbo.ufn_Concatena(
@ID char(8)
)
RETURNS varchar(100)
BEGIN
DECLARE @Output varchar(100)
SET @Output = ''

SELECT @Output = @Output + Numero + ' - '
FROM dbo.myTable
WHERE [ID] = @ID

RETURN LEFT(@Output, LEN(@Output) - 3)
END
GO

/* Query */
SELECT [ID], dbo.ufn_Concatena([ID]) AS Numero
FROM dbo.myTable
GROUP BY [ID]
GO

/* Output:

ID Numero
-------- ---------------------
AG120858 33367890 - 0345678
FR231267 453567
ML190245 980345678 - 5478567

(3 row(s) affected)

*/

/* Pulizia */
DROP FUNCTION dbo.ufn_Concatena
DROP TABLE dbo.myTable

*Articolo originale :https://groups.google.com/forum/?hl=it&fromgroups#!topic/microsoft.public.it.sql/QVtowIa5dzU *

Concatenare record in MSSQL

Per concatenare record in MSSQL è necessario usare la sintassi:
Tabella People
Peter,
Paul,
Mary,

DECLARE @Names VARCHAR(8000)
SELECT @Names = COALESCE(@Names + ', ', '') + Name FROM People

Ottenendo il risultato Peter,Paul,Mary

Estrarre record casuali con MSSQL

Utilizzando funzione NEWID è possibile estrarre un record in maniera casuale:

SELECT TOP 1 * FROM tabella ORDER BY NEWID()

Per estrarre più record:

SELECT TOP NN * from tabella ORDER BY NEWID()

dove NN è il numero di record da estrarre.

Back to Top