2017-01-23 32 views
-1

我正在編寫一個程序,它將其他程序的主體和 作爲文本文件在本地存儲在我的設備中。如何在變量達到最大長度時對輸入進行分割

它正常工作時,我使用了大量的程序在這種情況下會被截斷除外。請注意我使用nvarchar(最大)。 有沒有解決問題的建議?

這是過程的一部分:

DECLARE @V_STRING NVARCHAR(MAX)='' 
DECLARE @V_Table TABLE (ID INT IDENTITY(1,1),LINE NVARCHAR(MAX)) 
IF @V_TYPE ='P'--PROCEDURES 
    BEGIN 
     SET @[email protected]_PATH+'4.PROCEDURES' 
     EXECUTE SP_CreateFolder @V_PATH,@P_DataBase 
     SET @V_TYPE='\CREATE PROCEDURES'+'.sql' 
     SET @V_STRING='USE ['[email protected]_NewDB+']; 
     GO 
     IF EXISTS (SELECT name from sys.objects where name='''[email protected]_ObjectName+''' AND TYPE=''P'') 
     BEGIN 
     DROP PROCEDURE ' [email protected]_ObjectName +' 
     END 
     GO' 
    END 
     SET @V_CheckType='USE '[email protected]_DataBase+'; EXECUTE SP_HELPTEXT '[email protected]_Objec [email protected]_object refer to the name of procedure and @P_DataBase refer to database which the procedure belong 
      INSERT INTO @V_Table (LINE)--get the body of given object and store in variable table by using sp_HELPTEXT dictionary 
       EXECUTE (@V_CheckType) 

      INSERT INTO @V_Table (LINE) 
       VALUES (' GO ') 


      SELECT @[email protected]_STRING+LINE FROM @V_Table 
      Execute SP_WriteToFile @V_PATH , @V_STRING --this procedure will create a text file in the path just created 

回答

0

sp_helptext的返回的255個字符的每個(如果定義是超過255個字符)的多個行; 嘗試使用sys.sql_modules或OBJECT_DEFINITION相反,定義將在單行的話,並更容易地工作着:

 SET @V_STRING='USE ['[email protected]_NewDB+']'; 

    SET @V_CheckType='USE '[email protected]_DataBase+'; select definition from sys.sql_modules where object_id = object_id('''[email protected]_Objec + ''')' [email protected]_object refer to the name of procedure and @P_DataBase refer to database which the procedure belong 
     INSERT INTO @V_Table (LINE)--get the body of given object and store in variable table by using sp_HELPTEXT dictionary 
      EXECUTE (@V_CheckType) 


     SELECT @[email protected]_STRING+LINE + CHAR(10) + 'GO' FROM @V_Table 

     --SELECT @V_STRING 

     Execute SP_WriteToFile @V_PATH , @V_STRING 
+0

但問題時,我分配結果的變量也將被削減仍然存在off – DANAA

+0

@DANAA爲答案添加了一個例子 –

+0

@DANAA實際上,還有一些要檢查的內容 - SP_WriteToFile中參數的定義是什麼?如果沒有聲明爲nvarchar(max),那麼可能會在那裏截斷。 –

相關問題