2017-01-23 6 views
-1

Ich schreibe eine Prozedur, die den Körper anderer Verfahren und speichert sie lokal in meinem Gerät als Textdatei.Wie teilt man die Eingabe einer Variablen, wenn sie ihre maximale Länge erreicht

Es funktioniert korrekt, außer wenn ich eine große Prozedur verwende, in diesem Fall wird es abgeschnitten. Hinweis verwende nvarchar (max). Irgendwelche Vorschläge, um das Problem zu lösen?

Dieser Teil des Verfahrens ist:

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 

Antwort

0

sp_helptext jeweils mehrere Reihen von 255 Zeichen zurückgibt (wenn die Definition über 255 Zeichen); Versuchen Sie stattdessen sys.sql_modules oder OBJECT_DEFINITION verwendet, werden die Definitionen dann in einer einzigen Reihe sein, und viel einfacher zu handhaben:

 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

Aber das Problem ist immer noch da, wenn ich das Ergebnis zuweisen auf die Variable wird es geschnitten werden aus – DANAA

+0

@DANAA hinzugefügt, um die Antwort –

+0

@ DANAA tatsächlich, etwas anderes zu überprüfen - was ist die Definition der Parameter in SP_WriteToFile? Wenn das nicht als nvarchar (max) deklariert ist, können Sie dort abgeschnitten werden. –

Verwandte Themen