본문 바로가기

C#/C# 코딩의 기술

테이블명을 제한적으로 만들어서 관리가 필요할때.

 - 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");

                }