pour mes propres disques, j'ai une table dans l'un de mes serveurs où j'aime enregistrer mes activités et mes scripts
la définition de la table est:
IF OBJECT_ID('[dbo].[activity]') IS NOT NULL
DROP TABLE [dbo].[activity]
GO
CREATE TABLE [dbo].[activity] (
[dt] DATE NOT NULL,
[i] SMALLINT NOT NULL,
[activity] NVARCHAR(max) NOT NULL,
[script] NVARCHAR(max) NULL
CONSTRAINT [DF__activity__script__6E01572D] DEFAULT (NULL))
GO
CREATE CLUSTERED INDEX [pk_activity]
ON [dbo].[activity] ([dt] desc, [i] desc)
comme cette table est située dans la base de données DBA
sur mon DBA_SERVER
serveur, de ma machine locale j'ai créé un linked server
à la DBA_SERVER
Pour que je puisse insérer des scripts dans ma table.
voici comment j'insérez un script dans ma table, le script est situé sur ma machine locale:
INSERT INTO [MY_DBA_SERVER].[DBA].[dbo].[activity]
([dt]
,[i]
,[activity]
,[script])
SELECT
DT=cast ('3 may 2018' as date)
,I=1100
,ACTIVITY='MOVE APPLICATION ROWS - the Ids work'
,[script]=BulkColumn
FROM Openrowset( Bulk 'C:\Users\MMiorelli\Downloads\applicationID consolidated.sql',
Single_Blob) as [the script]
et cela semble fonctionner correctement, car lorsque j'exécute la sélection ci-dessous:
SELECT [dt]
,[i]
,[activity]
,[script]
FROM [MY_DBA_SERVER].[DBA].[dbo].[activity]
GO
Je peux voir que les choses que j'ai juste insérées sont sur ma table.
et quand j'exécute le script suivant, je découvre la quantité de données dans chaque champ:
SELECT [dt]
,[i]
,[activity]
,[script]
,len_activity=DATALENGTH( [activity])
,len_script=DATALENGTH( [script])
FROM [MY_DBA_SERVER].[DBA].[dbo].[activity]
GO
et cela me donne ceci:
Mon problème est que je ne peux pas récupérer tout le contenu de mon script. J'ai essayé de le copier à l'aide de la souris comme vous pouvez le voir sur l'image ci-dessous:
Mais j'ai des scripts velus très longs et la copie comme celle qui les coupe de tout son ensemble.
ma question est:
Comment récupérer ce script
de ma table?
il peut être via Sélectionner ou même la sauver dans un fichier, je préférerais une manière T-SQL de le faire si possible.
Juste une curiosité serait-elle la même chose pour les images?
Vous devriez pouvoir accomplir cela avec la procédure stockée que j'ai fournie dans la réponse suivante (ici sur dba.se):
Comment générer plus de 4000 caractères dans SQLCMD
Puisque vous utilisez NVARCHAR(MAX)
, veuillez consulter la note vers le bas de cette réponse qui a un lien avec la version NVARCHAR
de cette procédure stockée sur Pastebin.
Dans les deux cas, les procédures stockées impriment la sortie en morceaux pour se déplacer autour de la limitation de 4000 ou 8 000 caractères (selon NVARCHAR
ou VARCHAR
, respectivement) de PRINT
, d'où vous ne devrait remarquer aucune troncature et , vous devez toujours obtenir de nouvelles lignes, etc., fonctionner comme prévu, ce qui ne se produira pas lors de la copie/colle de la grille de résultats.
Vous ne pouvez pas copier de la sortie de texte, car il tronque les données.
Vous ne pouvez pas copier de la sortie de la grille, non seulement parce qu'il tronque les données, mais elle mangue également des retours de chariot, des flux de lignes et d'autres caractères de contrôle.
Vous pourrait être capable de convertir cette colonne en XML, puis double-cliquez pour afficher les données dans un nouvel onglet. Je décris cela ici, mais pour un but différent:
Fondamentalement, SSMS n'a pas été faite pour faire la tâche que vous souhaitez faire. Vous pouvez extraire dans un fichier, mais il est fort probable que la troncature similaire se produise pendant ce processus.
Votre meilleur pari est de tirer les données de PowerShell ou C # et de faire cela écrire la sortie dans un fichier.
Il y a une autre façon similaire à Aaron, en utilisant le petit documenté processing-instruction
... chose.
L'utilisation de cela vous donne une cochèque XML, qui ne remplacera pas les entités prédéfinies.
En outre, la colonne aura des marques d'identification XML au début et à la fin, ce qui peut être un autre inconvénient en fonction de la manière dont vous souhaitez utiliser la sortie.
Mais ça va être clicky et vous montrer tout le monde!
CREATE TABLE dbo.LongText (
Id INT IDENTITY,
LongText_N NVARCHAR(MAX),
LongText_X XML
);
INSERT dbo.LongText ( LongText_N, LongText_X )
SELECT asm.definition, (SELECT asm.definition AS [processing-instruction(_)] FOR XML PATH(''))
FROM sys.all_sql_modules AS asm
SELECT * FROM dbo.LongText AS lt