3

私は Access データベースにアクセスでき、そのデータベース内には TSQL クエリで満たされたフィールドがあります。これらのクエリは、サーバー上の T-SQL によって処理されます。したがって、これらの SQL クエリを記述して、エンド サーバーで使用するフィールドに入力すると、構文などを検証できません。その Access データベースで一時クエリを作成できましたが、それは同じクエリ言語ではありません。たとえば、Access では正しく使用されますIIFが、TSQL では使用されません (代わりに になりますCASE)。

TSQL を使用してこのサーバーに直接アクセスすることはできません。T-SQL クエリ (構文など) を検証する方法はありますか? おそらくオンラインのWebツール?

SQL サーバーにアクセスできないことに注意してください。Access dbのみとそれだけです。テーブル名などを検証しないことは理解していますが、期待していません。

4

6 に答える 6

5

実際には、MattMc3 の回答と FremenFreedom の回答の組み合わせが機能するはずです。

SQL エクスプレスをダウンロードします。

次に、次のストアド プロシージャを宣言します。

create procedure IsValidSQL (@sql varchar(max)) as
begin
    begin try
        set @sql = 'set parseonly on;'+@sql;
        exec(@sql);
    end try
    begin catch
        return(1);
    end catch;
    return(0);
end; -- IsValidSQL

次の方法でテストできます。

declare @retval int;
exec @retval = IsValidSQL 'select iif(val, 0, 1) from t';
select @retval

または:

declare @retval int;
exec @retval = IsValidSQL 'select val from t';
select @retval

注: これにより、IIF() の問題がキャッチされます。テーブル構造または列構造に関連するものは何もキャッチしません。そのためのスキーマが必要になり、わずかに異なるアプローチ (「select top 0 * from () t」) が必要になります。

SQL Fiddle オンラインで何かできるかもしれません。ただし、データベースのローカル コピーを用意することをお勧めします。

于 2012-11-09T21:51:41.413 に答える
2

The Data Dude (Gert Drapers) は、組み込みの SQL Server T-SQL パーサーをアプリケーションで使用する方法について説明しています。

持っている SQL ステートメントの有効性のみを確認したい場合 - これは良い方法かもしれません。単体テストを実行する場所に SQL Server 自体をインストールする必要はありません。

これは .NET ベースのアプローチであり、もちろん、ライブ データベースを使用していない場合、データベース内のオブジェクト名を検証することはできませんが、T-SQL ステートメントの構文エラーを検出することはできます。

于 2012-11-09T21:46:06.973 に答える
2

NOEXECオプションを使用できます:

SET NOEXEC ON

SELECT 1 AS Test

SET NOEXEC OFF
于 2013-03-28T12:36:03.550 に答える
2

SET PARSEONLY ONT-SQL を解析して、スクリプトの最初の行としてa を使用して SQL Server マシンで実行することにより、有効な構文を確認できます。テーブル名やフィールド名は検証されませんが、構文エラーがあれば表示されます。

于 2012-11-09T21:39:27.777 に答える
0

それらがかなり静的である場合は、それらをSQLデータベースのストアドプロシージャに変換してから、アクセスから呼び出すだけです。

于 2012-11-09T22:08:27.217 に答える
0

SQL Server Management Studio Express (無料ダウンロード) は通常の SQL Server インスタンスに接続できますか? もしそうなら、おそらくそこでクエリをテストできます。実際のサーバーに接続できなくても、Express でデータベースのテスト バージョンを作成できる場合があります。これにより、少なくとも構文と命名の問題を把握できます。

于 2012-11-09T21:36:41.483 に答える