TSQL – supprimer les tables d’une base par schéma

Il arrive de vouloir supprimer certaines tables dans une base, mais sans forcément dropper toute la base.
En se basant sur les tables système il est rapidement facile de supprimer les tables d’un schéma.

Une requête TSQL et c’est parti …

[fusion_builder_container hundred_percent= »yes » overflow= »visible »][fusion_builder_row][fusion_builder_column type= »1_1″ background_position= »left top » background_color= » » border_size= » » border_color= » » border_style= »solid » spacing= »yes » background_image= » » background_repeat= »no-repeat » padding= » » margin_top= »0px » margin_bottom= »0px » class= » » id= » » animation_type= » » animation_speed= »0.3″ animation_direction= »left » hide_on_mobile= »no » center_content= »no » min_height= »none »][sql]
— =============================================
— Author: Djo
— Create date: 28 mars 2012
— Description: Permet de supprimer toutes les tables d’une base sous SQLSERVER
— =============================================

DECLARE @requete VARCHAR(MAX), @nomSchema VARCHAR(MAX), @nomTable VARCHAR(MAX)

DECLARE supprimToutesLesTablesDeLaBase CURSOR FOR

SELECT tab.name as nomTable
,sch.name as nomSchema
FROM sys.tables as tab
INNER JOIN sys.schemas as sch ON tab.schema_id = sch.schema_id
WHERE type = ‘U’ AND sch.name <> ‘DBO’

OPEN supprimToutesLesTablesDeLaBase
FETCH NEXT FROM supprimToutesLesTablesDeLaBase INTO @nomTable, @nomSchema
WHILE(@@FETCH_STATUS = 0)
BEGIN
SET @requete = ‘DROP TABLE ‘ + @nomSchema + ‘.’ + @nomTable
EXEC (@requete)
FETCH NEXT FROM supprimToutesLesTablesDeLaBase INTO @nomTable, @nomSchema
END
CLOSE supprimToutesLesTablesDeLaBase
DEALLOCATE supprimToutesLesTablesDeLaBase
[/sql][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]

SQLServer – Comment réindexer une base

Le script qui suit est issu de la FAQ du site Developpez

Voici la description faite sur le site par HULK

La gestion des index par SQL Server peut entraîner la fragmentation de ceux-ci et une dégradation des performances. Si le volume d’informations de votre base évolue beaucoup, il est nécessaire de réindexer votre base. Plus votre base change, plus les index perdent en efficacité, il faut donc les recréer. On peut reconstruire les index avec la commande DBCC REINDEX.

Le seul truc pour moi c’est que le script ne prenait pas en compte les schémas, voici donc la modification du script avec la prise en compte des schémas.

[fusion_builder_container hundred_percent= »yes » overflow= »visible »][fusion_builder_row][fusion_builder_column type= »1_1″ background_position= »left top » background_color= » » border_size= » » border_color= » » border_style= »solid » spacing= »yes » background_image= » » background_repeat= »no-repeat » padding= » » margin_top= »0px » margin_bottom= »0px » class= » » id= » » animation_type= » » animation_speed= »0.3″ animation_direction= »left » hide_on_mobile= »no » center_content= »no » min_height= »none »][sql]
DECLARE @schemaName sysname
DECLARE @table_name sysname
DECLARE @schemaTable varchar(max)
DECLARE @TSQL nvarchar(4000)
DECLARE @Err int
DECLARE @Mess varchar(400)
SET @Mess = ‘Début réindexation’
RAISERROR(@Mess, 10, 1) WITH LOG
–Modif de la requete Hotfirenet
DECLARE table_list CURSOR FAST_FORWARD FOR SELECT sch.name as schemaName, tab.name as nom FROM sys.tables as tab INNER JOIN sys.schemas as sch ON tab.schema_id = sch.schema_id WHERE type = ‘u’
–Fin de modif
OPEN table_list
FETCH NEXT FROM table_list INTO @schemaName, @table_name
WHILE @@fetch_status = 0
BEGIN
–Modif Hotfirenet
SET @schemaTable = ‘[‘+@schemaName+’].[‘+@table_name+’]’
–Fin de modif
SET @TSQL = N’DBCC DBREINDEX("’ + @schemaTable + N’")’

EXECUTE sp_executesql @TSQL
–SELECT @TSQL
SET @Err = @@error
IF (@Err != 0)
BEGIN
SET @Mess = ‘Echec réindexation table ‘ + @schemaTable + ‘ suite erreur ‘ + CONVERT(varchar, @Err)
RAISERROR(@Mess, 16, 1) WITH LOG
END

FETCH NEXT FROM table_list INTO @schemaName, @table_name
END
CLOSE table_list
DEALLOCATE table_list
SET @Mess = ‘Fin réindexation’
RAISERROR(@Mess, 10, 1) WITH LOG
GO
[/sql][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]

SQL – Injection SQL ok mais comment l’éviter avec MS SQL avec PHP?

Sous MySQL il existe la fonction mysql_escape_string ou encore mysql_real_escape_string, mais sous MS SQL avec PHP ces fonctions n’existent pas.

Voici une fonction équivalente a mysql_escape_string , mais l’une comme l’autre elles ne protègent pas les caractères % et _.

[php]
function mssql_escape_string($str) {
$str = str_replace("’"," »",$str);
$str = htmlspecialchars($str, ENT_QUOTES);
return $str;
}
[/php]

HowTo – Apache, PHP et Microsoft SQL Server

Voici quelques jours déjà que je bute sur un problème, au travail où je suis nous utilisons le SGBD Microsoft SQL Server, et nous avons des sites intranet en PHP qui tourne sous IIS, mais sur ma machine pour développer je ne me suis pas amusé à installer IIS avec PHP, mais j’utilise tout simplement WAMP (Windows Apache PHP MySQL ) .

Pour me connecter à mon SGBD par PHP, ça ne change pas c’est pareil qu’avec MySQL :

[fusion_builder_container hundred_percent= »yes » overflow= »visible »][fusion_builder_row][fusion_builder_column type= »1_1″ background_position= »left top » background_color= » » border_size= » » border_color= » » border_style= »solid » spacing= »yes » background_image= » » background_repeat= »no-repeat » padding= » » margin_top= »0px » margin_bottom= »0px » class= » » id= » » animation_type= » » animation_speed= »0.3″ animation_direction= »left » hide_on_mobile= »no » center_content= »no » min_height= »none »][php]
<?php
define(‘DB_NAME’, ‘mabase’);
define(‘DB_HOST’, ‘monServeur’);
define(‘DB_USER’, ‘monUser’);
define(‘DB_PASSWORD’, ‘monPass’);

$dblink = @mssql_connect(DB_HOST, DB_USER, DB_PASSWORD);

if($dblink) {
$selectdatabase = @mssql_select_db(DB_NAME, $dblink);
if(!$selectdatabase) {
echo ‘erreur lors de la selection de la bdd’;
exit;
}
} else {
echo ‘erreur de connexion a la bdd’;
exit;
}
?>
[/php]
Par contre, lorsque j’ai voulu me connecter à mon SQLEXPRESS qui se trouve sur ma machine, je n’ai jamais pu me connecter à celui-ci !!

Pourtant, mon script de connexion fonctionne bien et j’arrive à me connecter sur un serveur distant qui possède SQL Server, peut être une option n’est pas activée sur mon SQLEXPRESS ?

Après de longues recherches sur Google, j’ai finalement trouvé qu’il y a un problème avec PHP pour se connecter à un SGBD qui possède des instances …

Et oui pour accéder à mon SQLEXPRESS le chemin est bien nommachineSQLEXPRESS, SQLEXPRESS est donc une instance de du SGBD.

Du coup pour que PHP puisse se connecter il faut donc remplacer ntwdblib.DLL qui se trouve pour WAMP dans les répertoires :

  • C:wampbinapacheapache2.2.8
  • C:wampbinphpphp5.2.6
  • C:WindowsSystem32

Également pour vous connecter, il faut dans faire ceci :

[/fusion_builder_column][fusion_builder_column type= »1_1″ background_position= »left top » background_color= » » border_size= » » border_color= » » border_style= »solid » spacing= »yes » background_image= » » background_repeat= »no-repeat » padding= » » margin_top= »0px » margin_bottom= »0px » class= » » id= » » animation_type= » » animation_speed= »0.3″ animation_direction= »left » hide_on_mobile= »no » center_content= »no » min_height= »none »][php]
<?php
define(‘DB_NAME’, ‘mabase’);
define(‘DB_HOST’, ‘maMachine\monInstance’);
define(‘DB_USER_UTIL’, ‘monUser’);
define(‘DB_PASSWORD_UTIL’, ‘monPass’);

$dblink = @mssql_connect(DB_HOST, DB_USER, DB_PASSWORD);

if($dblink) {
$selectdatabase = @mssql_select_db(DB_NAME, $dblink);
if(!$selectdatabase) {
echo ‘erreur lors de la selection de la bdd’;
exit;
}
} else {
echo ‘erreur de connexion a la bdd’;
exit;
}

?>
[/php]

Pour télécharger la DLL Google est ton ami[/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]