Automatiser la requête ouverte dans MS SQL Server
Création des modules de requête Get Open
Nous supposons que vous avez les connaissances et l'autorisation nécessaires pour créer des tables, des procédures stockées, des objets et des travaux de serveur lié, sans cela, il peut y avoir des problèmes pour lesquels nous ne pouvons pas vous aider.
Lors de son exécution, nous avons tendance à le placer dans une base de données de type Utilitaires où nous conservons des fonctions partagées et des objets de maintenance.
La première tâche que nous avons est de créer une table principale pour gérer tout le flux de données, quelques-unes des colonnes à garder un œil sur include;
- GetOpenQueryStream - Il s'agit d'un champ entier qui vous permet de traiter par lots des ensembles de tables, et s'exécutera dans l'ordre défini dans la colonne GetOpenQueryOrder
- GetOpenQueryName - Cela doit être GetOpenQuery_Progress ou GetOpenQuery_Oracle, sauf si vous avez adapté le code.
- GetOpenQueryLinkServ - Est le nom du serveur lié, qui doit être configuré dans les objets serveur
- GetOpenQuerySourceSchema - Est le schéma de la base de données source
- GetOpenQueryDatabase, GetOpenQuerySchema, GetOpenQueryTable forment l'identificateur en trois parties de l'endroit où les données sont définies pour être copiées.
- Vous pouvez ajouter des instructions WHERE, INNER et TOP
- GetOpenQuerySkipCols - cela supprimera les colonnes de la table lors de l'importation.
Create Table
CREATE TABLE dbo.GetOpenQuery(
GetOpenQueryID int IDENTITY(1,1) NOT NULL,GetOpenQueryStream int NULL,GetOpenQueryName nvarchar(100) NULL,GetOpenQueryLinkServ nvarchar(100) NULL,GetOpenQueryDatabase nvarchar(100) NULL,GetOpenQuerySchema nvarchar(max) NULL,GetOpenQueryTable nvarchar(100) NULL,GetOpenQueryWHERE nvarchar(1000) NULL,GetOpenQueryTOP nvarchar(100) NULL,GetOpenQuerySourceSchema nvarchar(100) NULL,GetOpenQuerySkipCols nvarchar(max) NULL,GetOpenQueryINNER nvarchar(max) NULL,GetOpenQuerySkipTruncate bit NULL DEFAULT ((0)),GetOpenQueryOrder bit NULL DEFAULT ((0)))
Un hub
Les travaux peuvent ensuite être accrochés pour transmettre un ID de flux et parcourir les tables pertinentes via cette procédure stockée. Cela parcourt le tableau ci-dessus et déclenche le code pertinent pour le serveur lié Oracle ou Progress.
Cela devient alors le hub par lequel tous les autres travaux peuvent être appelés.
Create Stored Procedure
CREATE PROC [dbo].[GetOpenQuery_Data](@Stream INT) AS BEGINDECLARE @GetOpenQueryName NVARCHAR(100),@GetOpenQueryLinkServ NVARCHAR(100),@GetOpenQueryDatabase NVARCHAR(100),@GetOpenQuerySchema NVARCHAR(MAX),@GetOpenQueryTable NVARCHAR(100),@GetOpenQueryWHERE NVARCHAR(1000),@GetOpenQueryTOP NVARCHAR(100),@SrcScheme NVARCHAR(100),@SkipCols NVARCHAR(MAX),@GetOpenQueryINNER NVARCHAR(MAX),@GetOpenQuerySkipTruncate BIT DECLARE @SQL NVARCHAR(MAX),@SQLRows BIGINT,@SQLRowCount BIGINT,@SQLOutPut NVARCHAR(100)='@SQLRows BIGINT' DECLARE C CURSOR FAST_FORWARD FORSELECTGetOpenQueryName, GetOpenQueryLinkServ, GetOpenQueryDatabase, GetOpenQuerySchema, GetOpenQueryTable,GetOpenQueryWHERE, GetOpenQueryTOP, GetOpenQuerySourceSchema, GetOpenQuerySkipCols, GetOpenQueryINNER, GetOpenQuerySkipTruncateFROM GetOpenQueryWHERE GetOpenQueryStream=@StreamORDER BY GetOpenQueryOrderOPEN CFETCH NEXT FROM CINTO @GetOpenQueryName,@GetOpenQueryLinkServ,@GetOpenQueryDatabase,@GetOpenQuerySchema,@GetOpenQueryTable,@GetOpenQueryWHERE,@GetOpenQueryTOP,@SrcScheme,@SkipCols,@GetOpenQueryINNER,@GetOpenQuerySkipTruncateWHILE @@FETCH_STATUS = 0 BEGIN BEGIN TRY SET @SQL='EXEC '+@GetOpenQueryName+' '''+ @GetOpenQueryLinkServ+''','''+ @GetOpenQueryDatabase+''','''+ @GetOpenQuerySchema+''','''+ @GetOpenQueryTable+''','+ ISNULL(NULLIF(''''+@GetOpenQueryWHERE+'''',''),'NULL')+','+ ISNULL(NULLIF(@GetOpenQueryTOP,''),'NULL')+','+ ISNULL(NULLIF(@SrcScheme,''),'NULL')+','+ ISNULL(NULLIF(''''+@SkipCols+'''',''),'NULL')+','+ ISNULL(NULLIF(''''+@GetOpenQueryINNER+'''',''),'NULL')+','+(CASE WHEN @GetOpenQuerySkipTruncate=1 THEN '1' ELSE '0' END) EXEC sp_executesql @SQL SET @SQLRows=@@ROWCOUNT SELECT @SQLRows END TRY BEGIN CATCH PRINT @GetOpenQueryLinkServ+'; Table '+@GetOpenQueryTable+' Failed' END CATCH PRINT @SQL FETCH NEXT FROM C INTO @GetOpenQueryName,@GetOpenQueryLinkServ,@GetOpenQueryDatabase,@GetOpenQuerySchema,@GetOpenQueryTable, @GetOpenQueryWHERE,@GetOpenQueryTOP,@SrcScheme,@SkipCols,@GetOpenQueryINNER,@GetOpenQuerySkipTruncateEND CLOSE C;DEALLOCATE C;ENDGO