J'essaye d'écrire un proc stocké simple qui prend trois arguments «nom de base de données un», «nom de base de données deux» et «nom de table». Le sql effectuera ensuite un nombre de lignes pour la table définie dans chaque base de données et le stocker.Sélection d'une table où le nom est passé en tant que variable
travail sur coup par coup j'ai frappé le premier problème que vous ne pouvez pas faire
select * from @tablename
Je sais que vous pouvez utiliser SQL dynamique avec la commande exec
mais ce n'est pas idéal que je ne peux pas revenir valeurs.
L'exemple suivant semble fonctionner mais ne fonctionne pas.
declare @tablename as nvarchar(500)
declare @sqlstring as nvarchar(500)
declare @parmdefinition as nvarchar(500)
declare @numrows as bigint
set @tablename = N'dummy_customer'
set @parmdefinition = N'@tablenameIN nvarchar(500), @numrowsOUT as bigint OUTPUT'
select @sqlstring = 'select @numrowsOUT = count(*) from @tablenameIN'
select @sqlstring
exec sp_executesql @sqlstring, @parmdefinition, @tablenameIN = @tablename, @numrowsOUT = @numrows OUTPUT
select @numrows
Le message d'erreur est donné
Msg 1087, Level 16, State 1, Line 1
Must declare the table variable "@tablenameIN".
actuellement en utilisant SQL Server 2008 SP2. Nous procédons ainsi parce que nous effectuons une migration et que le client souhaite un rapport indiquant le nombre de lignes pour chaque table dans la base de données source et de destination. Comme il existe de nombreuses tables pouvant utiliser sp_MSForEachTable pour appeler le proc stocké semble idéal.
Edit:
La solution finale pour référence future est
declare @tablename as nvarchar(500)
declare @sqlstring as nvarchar(500)
declare @parmdefinition as nvarchar(500)
declare @numrows as bigint
set @tablename = N'dummy_customers'
set @parmdefinition = N'@tablename nvarchar(500), @numrowsOUT as bigint OUTPUT'
select @sqlstring = 'select @numrowsOUT = count(*) from ' + quotename(@tablename)
exec sp_executesql @sqlstring, @parmdefinition, @tablename = @tablename, @numrowsOUT = @numrows OUTPUT
select @numrows
Cela fonctionne parfaitement. Je vous remercie. – JamieDainton