タグ付けされた質問 「functions」

関数は指定された作業を実行し、通常はパラメーターを入力として受け取ります。データベースに関しては、これらはSQLまたはデータベースベンダーに固有の場合があります。

10
標準SQLまたはT-SQLで1、2、3、3、2、1、1、2、3、3、2、1、…シリーズを生成する方法は?
二つの数を考えるnとm、私は、フォームのシリーズを生成したいです 1, 2, ..., (n-1), n, n, (n-1), ... 2, 1 そしてそれを繰り返しmます。 たとえば、n = 3およびの場合、m = 4次の24個の数字のシーケンスが必要です。 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1 ---------------- ---------------- ---------------- ---------------- PostgreSQLでこの結果を2つの方法のいずれかで達成する方法を知っています。 generate_series関数を使用する次のクエリと、順序が正しいことを保証するためのいくつかのトリックを使用します。 WITH parameters (n, …

2
PostgreSQL:関数の引数としてテーブルを渡します
TYPEPostgreSQLで発見しています。私はTABLE TYPEいくつかのテーブルが尊重しなければならないことを持っています(インターフェース)。例えば: CREATE TYPE dataset AS( ChannelId INTEGER ,GranulityIdIn INTEGER ,GranulityId INTEGER ,TimeValue TIMESTAMP ,FloatValue FLOAT ,Status BIGINT ,QualityCodeId INTEGER ,DataArray FLOAT[] ,DataCount BIGINT ,Performance FLOAT ,StepCount INTEGER ,TableRegClass regclass ,Tags TEXT[] ,WeightedMean FLOAT ,MeanData FLOAT ,StdData FLOAT ,MinData FLOAT ,MaxData FLOAT ,MedianData FLOAT ,Percentiles FLOAT[] ); このテンプレートを使用してテーブルを作成できます: CREATE TABLE …

3
T-SQLのTheil-Sen推定関数
T-SQLで書かれたTheil-Sen回帰関数を持っている人はいますか? Perlで書かれたものを見つけましたが、SQLに再コードすることができません。

1
関数呼び出しによる推定クエリプランと実際のクエリプラン
SQLサーバーにこのクエリがあります。マージレプリケーションクエリです。 SELECT DISTINCT b.tablenick, b.rowguid, c.generation, sys.fn_MSgeneration_downloadonly ( c.generation, c.tablenick ) FROM #belong b LEFT OUTER JOIN dbo.MSmerge_contents c ON c.tablenick = b.tablenick AND c.rowguid = b.rowguid; 推定クエリプランには、3つのクエリに関する情報が含まれます。 上記のクエリ fn_MSgeneration_downloadonlyへの関数呼び出し fn_MSArticle_has_downloadonly_propertyへの関数呼び出し 実際のクエリプランには、次の情報のみが含まれます。 上記のクエリ 関数については何もありません。実際のプランで機能情報が欠けているのはなぜですか? 私はこれらのオプションを試しました: SET STATISTICS PROFILE ON SET STATISTICS XML ON 実際のプランを作成しましたが、Management Studioで実際のクエリプランオプションを使用したときと同じように、パート2と3が欠落していました。 たとえば、プロファイラーを使用して関数呼び出しに関する情報を取得する場合、どのイベントを選択しますか? クエリプランに特に関連する回答は見つかりませんでしたが、SP:StmtStartingおよびSP:StmtCompletedのプロファイルを作成したところ、関数呼び出しが表示されました。

8
一意のIDを明示的に生成するID列またはUDF?
私は、一意のIDを明示的に生成するUDFからPRIMARY KEY、Identity Columnsを使用する方が良いかどうかについて議論しています。 Identity列について議論しています。 私のパートナーは、手動で値を生成することを主張しています、と彼は主張します UDFを作成できる別のテーブルにUDFを配置する リソースをロックする ID_Valueによって呼び出される1つのフィールドでIDテーブルをインクリメントする1 これをグローバル一意識別子として使用します またはid+1、挿入時にテーブルに 識別制約のないサーバーや環境間でデータを移動する方が簡単です。データがあるDBから、ステージングデータやダミーデータなどの別の類似のDBに移動する。非本番環境でのテストでは、すべてのレコードを昨日からテスト用のステージングまで引き下げたい場合があります。 どの実装がより意味がありますか?

2
Parallel Scalar UDFのサポートは妥当な機能リクエストですか?
スカラーUDFが全体的なシリアルプランを強制することはかなりよく文書化されています。 関数の並列実行 UDFを計算する必要があるパイプラインのポイントに入る行の数が多い場合、エンジンがそれらをプロセッサー間で単に分散できないのはなぜですか?UDF内に状態がない場合、順序は関係ありません。 UDFがブラックボックスであるため、カーソルを使用する必要があるという主張があります。反復間で一部の状態が維持されている場合、SP内でユーザーカーソルを並列化できませんが、それ以外の場合は並列化可能であるように見えます。 エンジンがUDF計算ステージだけでなく、全体の計画をシリアルにする理由を説明するための追加のポイント。 並列UDFのサポートは、要求するのに妥当な機能ですか?

2
PL / pgSQL関数でレコードを返す-クエリを高速化する
私が持っているPerlで書かれた非フォークゲームデーモンのPostgreSQL 9.3データベースに書き込みプレーヤー統計にacyncクエリを使用しています、。しかし、データベースから何かを読み取る必要がある場合(プレーヤーが禁止されている場合や、プレーヤーにVIPステータスがある場合など)は、同期クエリを使用します。 これにより、データベースから値が読み取られるまで、ゲームが一瞬停止します。 値を読み取るために非同期クエリを使用するようにゲームデーモンを書き換えることはできません(試してみましたが、変更が多すぎました)。私の質問は、いくつかの無関係なクエリを組み合わせることは理にかなっています(新しいプレーヤーの場合に行う必要があることです)接続)を1つのプロシージャに追加し、Perlプログラムに同時にいくつかの値を返すにはどうすればよいですか? 現在のクエリはすべて、プレーヤーIDをパラメーターとして取り、1つの値を返します。 -- Has the player been banned? select true from pref_ban where id=? -- What is the reputation of this player? select count(nullif(nice, false)) - count(nullif(nice, true)) as rep from pref_rep where id=? -- Is he or she a special VIP player? select vip > now() …

3
テーブルに数式を保存し、関数でその数式を使用する
PostgreSQL 9.1データベースがあり、その一部がエージェントの手数料を処理しています。各エージェントには、彼らが得る手数料の計算式があります。エージェントごとのコミッションを生成する機能を持っていますが、エージェント数が増えると使えなくなります。非常に長いケースステートメントと繰り返しコードを実行することを余儀なくされたため、私の機能が非常に大きくなりました。 すべての数式には定数変数があります: d ..その月に働いた日数 r ..獲得した新しいノード l ..ロイヤルティスコア s ..サブエージェント手数料 b ..基本レート i ..獲得した収益 式は次のようになります。 d*b+(l*4+r)+(i/d)+s 各エージェントは、HR部門と支払い式を交渉します。では、式をエージェントテーブルに保存して、テーブルから式を取得して値で変換し、金額を計算するだけの小さな関数のようにできますか?

5
列をコンマで分割するT SQLテーブル値関数
Microsoft SQL Server 2008でテーブル値関数を記述して、データベースのカンマ区切りの列を取得し、各値の個別の行を出力しました。 例:「one、two、three、four」は、次の値を含む列が1つだけの新しいテーブルを返します。 one two three four このコードはエラーが発生しやすいように見えますか?私がそれをテストするとき SELECT * FROM utvf_Split('one,two,three,four',',') 永久に実行され、何も返さない。MSSQLサーバーには組み込みの分割関数がないので(なぜ、なぜ、なぜ!?)、Webで見つけた同様の関数はすべて、完全にゴミ箱であるか、または私がやろうとしていることとは無関係であるため、これは特に失望します。 。 これが関数です: USE *myDBname* GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION [dbo].[utvf_SPlit] (@String VARCHAR(MAX), @delimiter CHAR) RETURNS @SplitValues TABLE ( Asset_ID VARCHAR(MAX) NOT NULL ) AS BEGIN DECLARE @FoundIndex INT DECLARE …

3
並列実行のためにスカラー関数をTVF関数に変換-引き続きシリアルモードで実行
の私のクエリの1つは、リリース後にシリアル実行モードで実行されていましたが、アプリケーションから生成されたLINQ to SQLクエリで参照されるビューで2つの新しい関数が使用されていることに気付きました。そのため、これらのSCALAR関数をTVF関数に変換しましたが、クエリはシリアルモードで実行されています。 以前、他のいくつかのクエリでスカラーからTVFへの変換を実行し、強制的なシリアル実行の問題を解決しました。 これがスカラー関数です: CREATE FUNCTION [dbo].[FindEventReviewDueDate] ( @EventNumber VARCHAR(20), @EventID VARCHAR(25), @EventIDDate BIT ) RETURNS DateTime AS BEGIN DECLARE @CurrentEventStatus VARCHAR(20) DECLARE @EventDateTime DateTime DECLARE @ReviewDueDate DateTime SELECT @CurrentEventStatus = (SELECT cis.EventStatus FROM CurrentEventStatus cis INNER JOIN Event1 r WITH (NOLOCK) ON (cis.Event1Id = r.Id) WHERE (r.EventNumber = …

1
計算列で使用されるスカラー関数、関数を更新する最もクリーンな方法は何ですか?
データベースのスカラー関数を更新したい。この関数は、キーテーブルのいくつかの計算列に使用されるため、更新しようとすると依存関係エラーが発生します。列を明示的に削除し、関数を更新して列を再度追加できますが、余計な手間をかけずに列の順序が変更され、他の意図しない結果が生じる可能性があります。もっときれいな方法はあるのだろうか?

1
文字入力を受け取り、日付形式を返す関数(入力が正しくない場合)
文字列文字を受け取り、日付形式を返す関数を書く必要があります。たとえば、入力は20120101であり、これは2012-01-01が必要です。問題は、この「2012ABCD」のようないくつかの誤った入力がある可能性があることです。その場合、2020-01-01などの固定された日付を関数が返すようにします。私がこれまでに書いたことは: Create Function ReturnDate (@date varchar(8)) Returns date as begin declare @result date set @result = (select convert(date , @date,111)) if(@@ROWCOUNT>0) return @result else return '2020-01-01' return @result end これは機能せず、2番目の部分(入力が正しくない場合)の処理方法がわかりません。

1
どうやら、私のCLRアセンブリ関数がデッドロックを引き起こしていますか?
私たちのアプリケーションは、OracleデータベースまたはMicrosoft SQL Serverデータベースと同等にうまく機能する必要があります。これを容易にするために、クエリ構文を均質化する少数のUDFを作成しました。たとえば、SQL ServerにはGETDATE()があり、OracleにはSYSDATEがあります。それらは同じ機能を実行しますが、それらは異なる単語です。共通の関数名で関連するプラットフォーム固有の構文をラップする、両方のプラットフォーム用のNOW()と呼ばれるラッパーUDFを作成しました。他にもそのような機能がありますが、その一部は本質的に均質化のためだけに存在します。残念ながら、これにはSQL Serverのコストがかかります。インラインスカラーUDFはパフォーマンスに悪影響を及ぼし、並列処理を完全に無効にします。別の方法として、同じ目標を達成するためにCLRアセンブリ関数を作成しました。これをクライアントに展開すると、デッドロックが頻繁に発生し始めました。この特定のクライアントはレプリケーションと高可用性の技術を使用しているため、ここで何らかのやり取りが行われているのではないかと思います。CLR関数を導入すると、このような問題がどのように発生するのか理解できません。参考までに、元のスカラーUDF定義と、C#の置換CLR定義およびそのSQL宣言を含めました。また、それが役立つ場合に提供できるデッドロックXMLもあります。 元のUDF CREATE FUNCTION [fn].[APAD] ( @Value VARCHAR(4000) , @tablename VARCHAR(4000) = NULL , @columnname VARCHAR(4000) = NULL ) RETURNS VARCHAR(4000) WITH SCHEMABINDING AS BEGIN RETURN LTRIM(RTRIM(@Value)) END GO CLRアセンブリ関数 [SqlFunction(IsDeterministic = true)] public static string APAD(string value, string tableName, string columnName) { return value?.Trim(); } …

2
関数を呼び出すときにスキーマプレフィックス(dbo)が必須なのはなぜですか?
ユーザーがデフォルトのスキーマ(dbo)でマップされ、スキーマにプレフィックスを付けずに[dbo]の下のすべてのテーブルを選択できる場合。 デフォルトのスキーマの下にある場合、プレフィックスなしでストアドプロシージャを実行できます。 それでは、なぜ関数の前にスキーマを付ける必要があるのでしょうか。 ありがとう!

1
SQL Sentry Plan ExplorerはUDFの読み取りをカウントしますか?
次のようなクエリがあります。 select dbo.fn_complexFunction(t.id) from mytable t SQL Sentry Plan Explorerで、クエリプランにUDFを含めるには、SQL SentryでGet Estimated Planを実行する必要があることに気付きました。 「実際のプランを取得」を実行すると、論理読み取りやその他のメトリックにUDFで発生する操作が含まれているように見えません。このような場合、プロファイラーを使用する唯一の回避策はありますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.