2009-12-11 76 views
3

我打印出一堆動態創建的DDL語句,並希望以特定方式對齊輸出。tsql中的字符串填充

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

輸出:

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) 

我所要的輸出是什麼:

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) 

是否有一個功能,讓我墊字符串由字符x的n個。我會用這樣的:

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

感謝

回答

4

我相信你想要的是可以從SQL 2005的REPLICATE功能。

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

MSDN: REPLICATE

1

您可以使用空格功能:

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

如果是別的東西比你要插入空格,你可以使用REPLICATE(VARCHAR,INT)。

1

您需要使用REPLICATE功能,具有DATALENGTH一起:

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