3

where句ステートメントをデータベーステーブルに保存しています。その後、selectステートメントで取得して使用しています。

これが私のsybaseクエリです。

"INSERT table(RUN_ID,RUN_DATE,GRGR_ID,SGSG_ID,COLUMN_NAME,ERROR_CODE)SELECT @pnRunId,getdate(),GRGR_ID,SGSG_ID,@COLUMN_NAME,@ERROR_CODE from table1_exct where + @WHERE_CLAUSE"

@WHERE_CLAUSE = '@IKA_COLUMN_NAME IS NOT NULL'

これを達成する方法を教えてください。

4

2 に答える 2

0

Abe の答えは正しいです。動的 SQL クエリを varchar として作成する場合、これが 1 回限りの問題であれば、EXEC(@varname) を介して実行できます。

ASE 15 で XML 機能を使用することを検討することもできます。実際、ある時点で詳細なビジネス ルール エンジンに対してまったく同じ演習を行い、ASE 15 内の xml 機能を使用して計算列、case ステートメント、およびDB 内の XML テキスト内の where 句。

ここにいくつかの情報があり ます http://www.sypron.nl/xml.html

したがって、このようなソリューションは、動的 SQL よりも少しエレガントに問題を解決できると思います。

本番環境で XML サポートを有効にできなかったため (従来の 2k ページの問題)、最終的には使用しませんでした...しかし、使用できるものを実装するワークロードをサポートするのに十分な大きさの問題がある場合、これで問題を解決できると思います。それ(私たちはJavaを使うだけになりました。)

于 2012-11-06T05:07:16.187 に答える
0

where句を挿入できるようですが、実行方法がわかりません。

それは難しいでしょうが、不可能ではありません。VARCHAR で Sql の一部を構築するには、カーソルまたはループを使用する必要があります。

declare @Sql VARCHAR(2000)

select @Sql = 'INSERT table(RUN_ID,RUN_DATE,GRGR_ID,SGSG_ID,COLUMN_NAME,ERROR_CODE)SELECT @pnRunId,getdate(),GRGR_ID,SGSG_ID,@COLUMN_NAME,@ERROR_CODE from table1_exct where ' 

while 1 = 1 
begin
    declare @claus VARCHAR(200)
    SET ROWCOUNT 1
    SELECT @claus = where_clause from some_table
    select @sql = @sql + @claus
    delete some_table where where_clause = @claus
    set rowcount 0
end

これには、考慮すべき2つのことがあります-最初と後続の句にWHEREとANDを提供しません(それができると確信しています)。ソースからwhere句を削除します(すべてを取得できますそれを回避するには、最初に一時タブを使用します。)

句がすべて同じ列にある場合は、列に LIKE 式のリストを作成し、LIKE 演算子を使用してそれに結合できます。これは便利です。

とにかく、上記の最後に、SQL を実行します。

EXEC(@Sql)

于 2012-10-30T14:57:08.057 に答える