2009-12-11 4 views
3

J'imprime un tas d'instructions DDL qui sont créées dynamiquement et qui veulent aligner la sortie d'une manière spécifique.Rembourrage de chaînes dans tsql

PRINT 'ALTER TABLE ' + @TableName + ' WITH NOCHECK ADD CONSTRAINT CK_' + @TableName + '_' + @ColumnName + '_MinimumLength CHECK (LEN(' + @ColumnName + ') > 0)' 

Sortie:

ALTER TABLE SignType ADD CONSTRAINT CK_SignType_Description_MinimumLength CHECK (LEN(Description) > 0) 
ALTER TABLE Person ADD CONSTRAINT CK_Person_Name_MinimumLength CHECK (LEN(Name) > 0) 

Ce que je veux que la sortie soit:

ALTER TABLE SignType    WITH NOCHECK ADD CONSTRAINT CK_SignType_Description_MinimumLength    CHECK (LEN(Description) > 0) 
ALTER TABLE Person     WITH NOCHECK ADD CONSTRAINT CK_Person_Name_MinimumLength       CHECK (LEN(Name) > 0) 

Y at-il une fonction qui me permet de pad la chaîne par n de caractère x. Je l'utiliser comme ceci:

PRINT 'ALTER TABLE ' + @TableName + PAD(' ', 50 - LEN(@TableName)) + ' WITH NOCHECK ADD CONSTRAINT .....' 

Merci

Répondre

4

Je crois que ce que vous voulez est la fonction REPLICATE disponible à partir de SQL 2005 sur.

PRINT 'ALTER TABLE ' + @TableName + REPLICATE(' ', 50 - LEN(@TableName)) + ' WITH NOCHECK ADD CONSTRAINT .....' 

MSDN: REPLICATE

1

Vous pouvez utiliser la fonction ESPACE:

PRINT 'ALTER TABLE ' + @TableName + SPACE(50 - LEN(@TableName)) + ' WITH NOCHECK ADD CONSTRAINT .....' 

Si c'est quelque chose d'autre qu'un espace que vous souhaitez insérer, vous pouvez utiliser REPLICATE (varchar, int).

1

Vous devez utiliser la fonction REPLICATE, ainsi DATALENGTH:

PRINT 'ALTER TABLE ' + @TableName + REPLICATE(' ', 50 - DATALENGTH(@tablename)) + ' WITH NOCHECK ADD CONSTRAINT .....'