블로그 이미지
010-9967-0955 보미아빠

카테고리

보미아빠, 석이 (500)
밥벌이 (16)
싸이클 (1)
일상 (1)
Total
Today
Yesterday

달력

« » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

공지사항

최근에 올라온 글

sql css 에서 가져왔는데....어디인지 링크를 잊어버림....잘 찾아보면 있을겁니다.

 

 

using Microsoft.SqlServer.TransactSql.ScriptDom;

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Security.Cryptography;

using System.Text;

using System.Threading.Tasks;



 class TSqlNormalizerSingle
    {
        static string hashValue;
        //public static string Normalize(MemoryStream input, int compatLevel, bool caseSensitive)
        public static string Normalize(string input, int compatLevel, bool caseSensitive)
        {
            TextReader rdr = new StringReader(input);
            TSqlParser parser;
            SqlScriptGenerator scrgen = null;

            #region a
            switch (compatLevel)
            {
                case 80:
                    {
                        scrgen = new Sql80ScriptGenerator();
                        parser = new TSql80Parser(true);
                        break;
                    }
                case 90:
                    {
                        scrgen = new Sql90ScriptGenerator();
                        parser = new TSql90Parser(true);
                        break;
                    }
                case 100:
                    {
                        scrgen = new Sql100ScriptGenerator();
                        parser = new TSql100Parser(true);
                        break;
                    }
                case 110:
                    {
                        scrgen = new Sql110ScriptGenerator();
                        parser = new TSql110Parser(true);
                        break;
                    }
                default:
                    {
                        return "Invalid compatibility level specified; exiting.";
                    }
            }
            #endregion a

            IList<ParseError> errs;
            TSqlFragment frag = parser.Parse(rdr, out errs);
            foreach (ParseError err in errs)
            {
                //Console.WriteLine(err.Message);
                if (err.Message.Length > 1)
                    return "query_hash_error";
            }

            foreach (var batch in (frag as TSqlScript).Batches)
            {
                myvisitor visit = new myvisitor();
                StringBuilder origscript = new StringBuilder();
                for (int tokIdx = batch.FirstTokenIndex; tokIdx <= batch.LastTokenIndex; tokIdx++)
                {
                    origscript.Append(batch.ScriptTokenStream[tokIdx].Text);
                }
                batch.Accept(visit);
                string script;
                scrgen.GenerateScript(batch, out script);


                using (var hashProvider = new SHA1CryptoServiceProvider())
                {
                    if (caseSensitive)
                    {
                        hashValue = Convert.ToBase64String(hashProvider.ComputeHash(Encoding.Unicode.GetBytes(script)));
                    }
                    else
                    {
                        hashValue = Convert.ToBase64String(hashProvider.ComputeHash(Encoding.Unicode.GetBytes(script.ToLowerInvariant())));
                    }
                }
            }
            return hashValue;
        }
    }

Posted by 보미아빠
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함