Sql-Server

如何從表格中檢索大文本?

  • May 6, 2021

為了我自己的記錄,我在我的一個伺服器中有一張表,我喜歡在其中保存我的活動和腳本

表定義是:

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)

由於該表位於DBA我伺服器上的數據庫中,因此我DBA_SERVER從本地電腦創建了一個linked server到 ,DBA_SERVER以便我可以將腳本插入到我的表中。

這就是我將腳本插入表中的方式,該腳本位於我的本地電腦上:

   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]

這似乎工作正常,因為當我執行下面的選擇時:

SELECT [dt]
     ,[i]
     ,[activity]
     ,[script]
 FROM [MY_DBA_SERVER].[DBA].[dbo].[activity]
GO

我可以看到我剛剛插入的東西在我的桌子上。 在此處輸入圖像描述

當我執行以下腳本時,我會發現每個欄位中有多少數據:

SELECT [dt]
     ,[i]
     ,[activity]
     ,[script]
     ,len_activity=DATALENGTH( [activity])
     ,len_script=DATALENGTH( [script])
 FROM [MY_DBA_SERVER].[DBA].[dbo].[activity]
GO

這給了我這個:

在此處輸入圖像描述

我的問題是我無法檢索腳本的全部內容。我嘗試使用滑鼠複製它,如下圖所示:

在此處輸入圖像描述

但是我有一些很長的毛茸茸的腳本,像這樣複製會縮短它們的整體。

我的問題是:

如何script從我的表中檢索這個?

它可以通過選擇甚至保存到文件中,如果可能的話,我更喜歡 T-SQL 方式。

只是好奇,圖像的方式是否相同?

您應該能夠使用我在以下答案中提供的儲存過程來完成此操作(在 DBA.SE 上):

如何在sqlcmd中輸出超過4000個字元

由於您使用的是NVARCHAR(MAX),請參閱該答案底部的註釋,其中包含指向NVARCHARPasteBin 上儲存過程版本的連結。

在任何一種情況下,儲存過程都會以塊的形式列印輸出以繞過 4000 或 8000 個字元的限制(分別取決於NVARCHARVARCHARPRINT,因此您不應該注意到任何截斷*,並且*您仍然應該得到換行符等按預期工作,從結果網格複製/粘貼時不會發生這種情況。

引用自:https://dba.stackexchange.com/questions/205720