問題タブ [user-defined-functions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
559 参照

vba - VBA for Excel 2007 で引数を UDF に渡すことができない

UDF を使用して熱交換器の熱伝達係数を計算したい複雑な反復スプレッドシートがあります。この関数には 5 つの引数 (2 つの文字列と 3 つの double) があります。弦と 1 つのダブル パスは問題ありません。残りの 2 つはまったく通過していないようです。問題のある引数の監視は、それらがゼロに等しいことを示しています。引数をバリアントとして再定義しようとしたところ、「value2」フィールドで必要な値を見つけることができました。ただし、(varName.Value2を介して)アクセスしようとするとすぐに消えます(時計にフィールドが突然「空」としてリストされます)。

問題のある引数のために関数に渡されるセルは、スプレッドシートの残りの部分に大きく依存しており、それらの値はほぼすべての反復で変化します。

誰もこれを以前に見たことがあり、回避策を知っていますか?

0 投票する
1 に答える
1629 参照

sql - ユーザー定義関数 SQL Server 2005 は非決定論的であると誤ってフラグを立てましたか?

この質問に関連して、データ ウェアハウスの UDF を確認することにしました (これは主に決定論的である必要があります)。

例えば:

次のクエリに表示されます。

どうしてこれなの?

0 投票する
2 に答える
5415 参照

sql - varchar から datetime deterministic への変換を行う方法は?

この質問の伝統とドキュメントに照らして、この関数を決定論的にするにはどうすればよいですか。

またはこれ(文字列/日付リテラルのため-はい、「1900-01-01」も試しました):

0 投票する
2 に答える
1819 参照

sql-server - クエリ プラン オプティマイザーは、結合/フィルター処理されたテーブル値関数でうまく機能しますか?

SQLSERVER 2005 では、大きなテーブルのサブセット データに対して任意の集計を実行する便利な方法として、テーブル値関数を使用しています (日付範囲などのパラメーターを渡します)。

大規模なクエリ内でこれらを結合された計算として使用していますが、クエリ プラン オプティマイザーがすべての条件でうまく機能するかどうか、または大規模なクエリでそのような計算をネスト解除する方がよいかどうか疑問に思っています。

  1. 意味がある場合、クエリ プラン オプティマイザーはテーブル値関数のネストを解除しますか?
  2. そうでない場合、手動でネストを解除することで発生するコードの重複を避けるために、何をお勧めしますか?
  3. もしそうなら、実行計画からどのようにそれを特定しますか?

コードサンプル:

.

.

サンプルが理にかなっていることを願っています。

ご協力ありがとうございました!

0 投票する
11 に答える
26927 参照

sql-server - SQL Server での効率的な ISNUMERIC() の置換?

そのため、古い信頼性 の低いものだけでなく、ストアド プロシージャ内で宣言されて呼び出されISNUMERICたときにのみ問題が発生することが判明した問題のトラブルシューティングに 5 時間を費やしました(私はたくさん持っています)。それをテストケースに抽出するために行う作業の量ですが、私の最初の必要性はそれを信頼できるものに置き換えることです)。ISNUMERICWITH SCHEMABINDING

の優れた効率的な代替品に関する推奨事項ISNUMERIC()int、などのバリエーションが本当に必要なのは明らかですがmoney、人々は何を使用していますか (できれば T-SQL で。このプロジェクトでは、これは大量の SQL Server から SQL Server へのデータであるため、SQL Server に制限されているためです)処理タスク)?

0 投票する
3 に答える
59528 参照

sql-server - パラメータをテーブル値関数に渡す方法

私は何かをしたい

0 投票する
6 に答える
1515 参照

sql - UDF パラメーターから SELECT ステートメントの FROM 句を指定する方法

私が Web への移植に取り組んでいるアプリケーションでは、現在、指定された「テンプレート」文字列に基づいて、実行時にさまざまなテーブルに動的にアクセスしています。SQL サーバーに移行するので、その負担をデータベースに戻したいので、動的 GridView をいじる必要はありません。テーブル名のパラメーターとクエリの WHERE 句のパラメーターを使用して、テーブル値の UDF を作成することを考えました。

UDF に次のように入力しましたが、明らかに機能しません。ある種の varchar または文字列を取り、FROM 句で機能するテーブル参照を取得する方法はありますか?

または、これと概念が似ている結果セットを取得する他の方法。基本的に、@code の ProductionCode が一致する varchar @template によって示されるテーブル内のすべてのレコード。

「テーブル変数 "@template" を宣言する必要があります」というエラーが表示されるため、SQL サーバーはテーブル変数から選択しようとしている可能性があります。

編集時: ええ、関数でそれを行う必要はありません。Stored Procs を実行できます。以前にそれらを作成したことがありません。

0 投票する
9 に答える
29921 参照

tsql - T-SQL 関数呼び出しをトレースする方法

T-SQL UDF で記述されたかなり複雑な式エバリュエーターをデバッグしようとしています (質問しないでください) 。

そしてもちろん、バグがあります。

ここで、PRINT ステートメント (InfoMessage イベントのハンドラーを実装することで ADO.NET から読み取ることができます) を使用して、ストアド プロシージャのトレースをシミュレートできます。

UDF に対して同じことを行うと、コンパイル時に次のメッセージが表示されます。

メッセージが表示されます (PRINT はリセットのようなものを行います@@ROWCOUNTが、これは明らかに UDF では禁止されていますが、呼び出しをトレースするにはどうすればよいでしょうか?デバッガーでの呼び出し...

編集: SQL プロファイラーを使用しようとしましたが (これは私にとって初めてのことでした)、何をトレースするのかわかりません: データベースに送信されたクエリを出力するトレースを取得できますが、それらは呼び出された式-UDF にドリルダウンできないという意味で不透明です。呼び出された実際のストアド プロシージャを追跡できますが、このプロシージャによって呼び出された UDF は一覧表示されません。何か不足していますか?私はそうではないと思います...

編集#2:(自動)受け入れられた回答は関数呼び出しをトレースしますが、非常に役立ちます-ありがとうございます-関数に渡されたパラメーターを見つけるのには役立ちません。もちろん、これは再帰関数のデバッグに不可欠です。解決策が見つかったら投稿します...

0 投票する
4 に答える
3005 参照

sql-server-2005 - SQL Server 2005 スカラー UDF のパフォーマンス

緯度/経度座標を格納しているテーブルがあり、特定のポイントの距離内にあるすべてのレコードを取得するクエリを作成したいと考えています。

このテーブルには約 1,000 万件のレコードがあり、Lat/Long フィールドのインデックスがあります

これは正確である必要はありません。とりわけ、経度 1 度 == 緯度 1 度であると考えていますが、これは正しくありませんが、取得している楕円はこの目的には十分です。

以下の例では、問題の点が [40, 140] で、半径 (度) が 2 度であるとします。

私はこれを2つの方法で試しました:


1) 2 点間の距離の平方を計算する UDF を作成し、その UDF をクエリで実行しています。

最初に正方形でフィルタリングして、クエリを高速化し、SQL でインデックスを使用できるようにしてから、円内にあるレコードのみが UDF と一致するように調整します。


2)クエリを実行して平方を取得し(前と同じですが、最後の行はありません)、これらのすべてのレコードを ASP.Net コードにフィードし、ASP.Net 側で円を計算します(同じ考え、平方を計算しますSqrt 呼び出しを保存する距離、および半径の 2 乗と比較します)。


驚いたことに、.Net 側での円の計算は、UDF を使用するよりも約 10 倍高速であり、その UDF で何かひどく間違ったことをしていると思います...

これは私が使用しているコードです:

ここで何か不足していますか?
SQL Server 内で UDF を使用することは、.Net に必要以上に約 25% 多いレコードを供給するよりもはるかに高速であるべきではないでしょうか? DataReader のオーバーヘッド、プロセス間の通信などでしょうか?

そのUDFで実行速度が遅くなるような、ひどく間違っていることはありますか?
それを改善する方法はありますか?

どうもありがとうございました!