테이블명을 제한적으로 만들어서 관리가 필요할때.
- sysobjects 를 참조해서 사용
- 30개 제한적으로 생성하고 꽉차면 가장오래된 테이블부터 삭제하고 생성
foreach (var tableName in new List<string>() { "Slip", "SlipDetail" })
{
query = string.Format(@"{0}
SET @STRSQL = ''
IF NOT EXISTS(SELECT NAME FROM sysobjects WHERE name LIKE '{1}_DigitChange_%' and [type] = 'U')
BEGIN SET @newTableName = '{1}_DigitChange_01' END
ELSE IF NOT EXISTS(SELECT NAME FROM sysobjects WHERE name = '{1}_DigitChange_30' and [type] = 'U')
BEGIN SET @newTableName= (SELECT TOP(1) '{1}_DigitChange_' + REPLICATE('0',2 - len(convert(varchar(2), CONVERT(int, RIGHT([name],2) ) +1)))+ convert(varchar(2), CONVERT(int, RIGHT([name],2) ) +1) FROM sysobjects WHERE name like '{1}_DigitChange_%' AND [type] = 'U' ORDER BY [crdate] DESC) END
ELSE
BEGIN
SET @newTableName= (SELECT TOP(1) [name] FROM sysobjects WHERE name like '{1}_DigitChange_%' AND [type] = 'U' ORDER BY [crdate])
SET @STRSQL = 'DROP TABLE ' + @newTableName
END
SET @STRSQL = @STRSQL + ' SELECT * INTO ' + @newTableName + ' FROM {1} WHERE GroupId = {2}'
UPDATE {1} SET {5} = ROUND({5},{3}), Vat = ROUND(Vat, {4}) FROM {1} S
JOIN Book B ON S.GroupId = B.GroupId AND S.BookId = B.BookId WHERE S.GROUPID = {2} AND B.IsForeign <> 1
EXEC SP_EXECUTESQL @STRSQL"
, query
, tableName
, Credential.Instance.GroupId
, priceDigit
, vatDigit
, (tableName == "Slip") ? "Price" : "Amount");
}