Sql-Server
如何從表格中檢索大文本?
為了我自己的記錄,我在我的一個伺服器中有一張表,我喜歡在其中保存我的活動和腳本
表定義是:
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 上):
由於您使用的是
NVARCHAR(MAX)
,請參閱該答案底部的註釋,其中包含指向NVARCHAR
PasteBin 上儲存過程版本的連結。在任何一種情況下,儲存過程都會以塊的形式列印輸出以繞過 4000 或 8000 個字元的限制(分別取決於
NVARCHAR
或VARCHAR
)