Comment exécuter une procédure stockée pour une autre base de données?
J'ai une procédure stockée qui devrait pouvoir être exécuté sur toutes les tables d'une base de données sur mon Serveur MS Sql. Plus de la combinaison de l'EXEC et UTILISER des énoncés n'ai pas de résultat dans quoi que ce soit. Voici la procédure stockée:
CREATE PROCEDURE [dbo].[usp_TrimAndLowerCaseVarcharFields]
(
@Database VARCHAR(200),
@TableSchema VARCHAR(200),
@TableName VARCHAR(200)
)
AS
BEGIN
DECLARE @sSql VARCHAR(MAX)
SET @Database = '[' + @Database + ']'
SET @sSql = ''
-- Create first part of a statement to update all columns that have type varchar
SELECT @sSql = @sSql + COLUMN_NAME + ' = LOWER(RTRIM(' + COLUMN_NAME + ')), '
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE = 'varchar'
AND TABLE_CATALOG = @Database
AND TABLE_SCHEMA = @TableSchema
AND TABLE_NAME = @TableName
SET @sSql = 'UPDATE ' + @Database + '.' + @TableSchema + '.' + @TableName + ' SET ' + @sSql
-- Delete last two symbols (', ')
SET @sSql = LEFT(@sSql, LEN(@sSql) - 1)
EXEC(@sSql)
END
S'il vous plaît, des conseils de ce que j'ai à faire pour l'exécuter sur [OtherDB].[TargetTable].
OriginalL'auteur Oleg Sakharov | 2011-11-21
Vous devez vous connecter pour publier un commentaire.
Vous pouvez obtenir à la fois des tables et procédures stockées. En d'autres termes, vous pouvez faire ceci:
Il semble que vous faites dans votre proc déjà.
Vous pouvez également exécuter une procédure stockée à l'aide du nom complet - par exemple
Honnêtement, ton proc a l'air bien, êtes-vous recevoir des messages d'erreur? Si oui, veuillez les poster. Aussi, assurez-vous que votre utilisateur a accès à l'autre DB.
EXEC
prend également en chargeAT
pour l'exécution de commandes sur les serveurs liés.et 4-une partie de nommage par exemple exec [linkedserver].[base de données].[schema].[proc]
OriginalL'auteur Code Magician
Le nom de la table dans la requête que vous avez utilisé est faux, c'est de regarder en haut dans la même base de données, mais vous avez besoin de chercher à partir de différentes bases de données. Donc, la requête sera comme ci-dessous:
TargetDB sera la même que votre passage de la base de données (@Base de données)
Si vous souhaitez utiliser [TargetDB] dynamiquement alors vous avez besoin de générer du sql(@sSql) et l'exécution de la chaîne sql.
OriginalL'auteur Elias Hossain
Dans ce cas, je suggérons d'utiliser le 2 sp dans SQL Server:
sp_MSforeachtable
sp_MSforeachdb
pour plus d'informations, veuillez lire l'article en ici.
espérons que cette aide.
Script complet:
OriginalL'auteur Ricardo Figueiredo