Comment générer un script avec 'Termination Character'

entrez la description de l'image ici entrez la description de l'image ici Je veux copyr en bloc des données SQL à d'autres DB. mais le problème est ici que lorsque j'essaie d'exécuter cette instruction d'insertion.

ça me donne une erreur comme

Msg 105, Level 15, State 1, Line 1 Unclosed quotation mark after the character ssortingng ''. Msg 102, Level 15, State 1, Line 1 Incorrect syntax near ''. 

J'ai trouvé la solution qui N' ' créer un problème. Mais quand je remplace ceci, c'est juste faire face à N' . Alors, comment peut replace l'set de la requête. Il y a trop de rangs donc je ne peux pas faire manuellement à N'' .

En essayant de le copyr il suffit de copyr cette partie

  INSERT [dbo].[HaveWantMaster] ([HaveWantMasterID], [Type], [Description], [TotalAvailable], [Status], [Deleted], [CreatedBy], [CreatedOn], [UpdatedBy], [UpdatedOn]) VALUES (409, 0, N'tap', 3, N' 

Un exemple simple est le suivant: PRINT 'THIS IS AMAZING

Msg 105, niveau 15, état 1, ligne 1 Guillemets non fermés après la string de caractères "THIS IS AMAZING".

Msg 102, niveau 15, état 1, ligne 1 Syntaxe incorrecte près de "THIS IS AMAZING".

Au lieu de cela, fermez correctement vos caractères: PRINT 'THIS IS AMAZING'

Le délimiteur ( ' ), ou CHAR(39) des caractères ASCII est un caractère spécial dans SQL Server qui dénote une string. Lorsque l'parsingur lit ce caractère, il assume les caractères suivants jusqu'à ce que le délimiteur suivant de type (') fasse partie de la même string.

 PRINT ASCII(CHAR(39) + ' ' + CHAR(39)) PRINT ASCII(' ') 

[Délimiteur]: 39 [Espace]: 32

L'parsingur lit la première instruction de la même façon que CHAR (39) + '' + CHAR (39) ( puisque '' et '' représentent une seule citation par set ), l'optimiseur est donc assez intelligent pour reconnaître les délimiteurs répétitifs et returnner le Caractère spécial.

Cependant, dans votre code, vous avez omis de nous fournir le code réel, nous ne pouvons donc pas vérifier si votre code contient des caractères spéciaux que votre environnement ne montre pas. Vous pouvez copyr coller "l'espace" du file text / sql original et vérifier les caractères spéciaux comme les caractères CL / RF .

 SELECT ASCII(' ') 

13

Remarque CHAR (13) est souvent confondu avec CHAR (10), les premiers commencent équivalent à la touche Entrée de votre keyboard, même si dans la requête, ils sont identiques dans cet exemple:

 PRINT 'HOW ABOUT THIS' + CHAR(10) + 'BROWN COW' + CHAR(13) + 'HOLY MOLY' --returns HOW ABOUT THIS BROWN COW HOLY MOLY 

CONCLUSION

  • Enquêter sur la position réelle de l'erreur. Le message vous indique qu'un délimiteur n'est pas entouré, pas là où il a échoué.
  • S'il provient du SQL dynamic, comprenez qu'il est possible d'inclure une requête structurée de manière incorrecte dans une string.

Par exemple

 EXEC(' PRINT''MyPeople') 

passera l'parsingur, mais cela se lit réellement

 PRINT'MyPeople 
  • Vérifiez les caractères spéciaux qui peuvent échouer votre parsingur et considérez à nouveau ce qui est en cours d'exécution ce lot. L' ENVIRONNEMENT EST TRÈS IMPORTANT .
  • N' échoue à la syntaxe. Le ( N ) indique simplement à l'parsingur qu'il traite des caractères NVARCHAR . Vous devez inclure tous les délimiteurs dans SQL Server.

Venez au point maintenant. Ascii 0 (zero) written to char(1) field .
Il commence à recevoir une erreur due à la null-terminated (ASCII 0) . Selon le http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=47571

Le problème est que les strings dans SQL Server ne sont pas terminées par un caractère nul (ASCII 0) comme le sont les strings en C ++. Ainsi, lorsque vous écrivez une string de caractères C ++ dans SQL Server, vous obtenez uniquement le premier caractère. vraiment deux: le caractère et un terminateur) – le terminateur est en réalité tronqué. Lorsque vous essayez d'écrire une string "vide" (qui contient vraiment juste le terminateur), aucune trucation ne se produit. Donc, vous obtenez le terminateur lui-même.