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.