10

私は自分の仕事で多くの t-sql を書いていますが、いくつかのタイプの拡張機能が利用可能であることを頻繁に望んでいます (たとえば、TypeScript のようなものは Javascript 用です。クラスとこのすべてのオブジェクト指向のものを作成でき、標準の Javascript にコンパイルされます)。 )。

私が持ちたいものの簡単な例(セマンティックはもちろん改善する必要があります):

-- Input:
def $t sysname
$t = 'Table1'
select * from $t
-- Output:
select * from Table1

-- Input (issues: remove last comma, newline characters):
def $t sysname
set $t = 'Table1'
;with Units as (select distinct Unit from $t),
[repeat @i; i=1; i<4]S$i as (select Unit, count(*) C from $t where T = $i group by Unit),[endrepeat]
select distinct [repeat (@i; i=1; i<4)]isnull(S$i.C, 0) C$i,[endrepeat]
from Units u
    [repeat @i; i=1; i<4]left join S$i on (u.Unit = S$i.Unit)[endrepeat]
group by [repeat @i; i=1; i<4]S$i.C,[endrepeat]
order by [repeat $i; i=4; i>0]S$i.C desc,[endrepeat]
-- Output:
;with Units as (select distinct Unit from Table1),
S1 as (select Unit, count(*) C from Table1 where T = 1 group by Unit),
S2 as (select Unit, count(*) C from Table1 where T = 2 group by Unit),
S3 as (select Unit, count(*) C from Table1 where T = 3 group by Unit)
select distinct isnull(S1.C, 0) C1, isnull(S2.C, 0) C2, isnull(S3.C, 0) C3
from Units u
    left join S1 on (u.Unit = S1.Unit)
    left join S2 on (u.Unit = S2.Unit)
    left join S3 on (u.Unit = S3.Unit)
group by S1.C, S2.C, S3.C
order by S3.C desc, S2.C desc, S1.C desc

-- Input (sq = singlequotes):
declare @sql varchar(max), @year int
set @year = 2012
set @sql = [sq]
select JobId, InventoryItem
from openquery(MyLinkedServer, '
    select JobId, InventoryItem
    from Jobs
    where year(Created) = {@year}
        and Type <> {TypeA}
') x
[endsq]
exec @sql
-- Output:
declare @sql varchar(max)
declare @year int
set @year = 2012
set @sql = '
    select  JobID, InventoryItem
    from    openquery (MyLinkedServer, ''
            select  JobID, InventoryItem
            from    XXX.Jobs
            where   year(Created) = ' + convert(varchar, @year) + '
                    and Type <> ''''TypeA''''
            order by "Created" desc
    '') x
'
exec @sql

これを実装するには独自の DSL を作成する必要があるように見えますが、これまで使用したことがないため、アイデアは大歓迎です。Visual Studio Visualization and Modeling SDK (VMSDK) は、この種のプロジェクトにとって正しい選択でしょうか? それはどれほど複雑になるでしょうか?:)

編集 - ORM が提案されましたが、これは C# や Java などの言語からではなく、SSMS から直接実行されます... つまり、オブジェクトやものはなく、クエリだけです。誤解を招くので、c# タグを削除しました。このアイデアは、SSMS プラグインの方向に向けられています。

4

4 に答える 4

5

おそらく、BQL 仕様は法案に適合するでしょうか? (スペックはリンク先参照)

JavaScriptにはCoffeeScript、Dart、Typescriptなどがあります。CSSにはLESSとSCSSがあります。

なぜSQLのためのものではないのですか?

そこで、私は悪魔の擁護者を演じて、「もし SQL がコンパイルの対象だったら?」と言いました。

そうすることで、次のような言語が必要であることに気付きました。

  • SQL の厳密なスーパーセット。これは、クリーンな移行を促進するため重要です。すべての有効な SQL はこの言語でも有効であるため、SQL コードベースを段階的に移行できます。
  • 優れた効率的な SQL プラクティスを促進する
  • SQL コードを DRY に保つことを促進する
  • 読みやすい SQL に変換

http://tech.pro/blog/1917/a-better-query-language-bql-language-specification

于 2015-01-30T13:25:04.530 に答える
4

linqpad を見たことがありますか。Linqクエリを記述して、生成された SQL を確認できます

SSMS プラグインではなく、SSMS と同様に独自のアプリケーションです。

リンクパッド

リンクパッド

于 2013-03-02T02:05:05.877 に答える
2

リレーショナル モデル (SQL) をオブジェクト指向モデル (C#、C++、Java ... など) にマッピングするには、ORM (オブジェクト リレーショナル マッピング) と呼ばれるものを使用します。基本的にオブジェクト指向モデルで作業し、ORM は作業内容を SQL に変換します。Linq to SQLnHibernate、およびEntity Frameworkはよく知られているものの中にありますが、そこには何百ものそれらがあります。

于 2013-03-01T20:29:42.680 に答える