タグ付けされた質問 「sql-clr」

SQL CLRは、MicrosoftのSQL ServerのCommon-Language-Runtime実装です。Microsoft SQL ServerでSQLCLRを実装およびトラブルシューティングする方法に関する質問には、このタグを使用します。

4
SQL CLRスカラー関数を使用してHASHBYTESをシミュレートするスケーラブルな方法は何ですか?
ETLプロセスの一環として、ステージングからの行をレポートデータベースと比較して、データが最後に読み込まれてから実際に変更された列があるかどうかを確認します。 この比較は、テーブルの一意のキーと、他のすべての列のある種のハッシュに基づいています。現在HASHBYTES、このSHA2_256アルゴリズムで使用しており、多数の並行ワーカースレッドがすべて呼び出している場合、大規模サーバーではスケーリングしないことがわかりましたHASHBYTES。 96コアサーバーでテストする場合、1秒あたりのハッシュで測定されるスループットは、16を超える同時スレッドを増加させません。同時MAXDOP 8クエリの数を1〜12に変更してテストします。テストでMAXDOP 1は、同じスケーラビリティのボトルネックが示されました。 回避策として、SQL CLRソリューションを試したいと思います。要件を述べるための私の試みは次のとおりです。 関数は並列クエリに参加できる必要があります 関数は決定的でなければなりません この関数は、NVARCHARまたはVARBINARY文字列の入力を受け取る必要があります(関連するすべての列は連結されます) 文字列の一般的な入力サイズは、長さが100〜20000文字です。20000は最大値ではありません ハッシュ衝突の可能性は、MD5アルゴリズムとほぼ同等かそれ以上でなければなりません。CHECKSUM衝突が多すぎるため、機能しません。 この機能は、大規模なサーバーで適切にスケーリングする必要があります(スレッド数が増加しても、スレッドあたりのスループットが大幅に低下することはありません) Application Reasons™の場合、レポートテーブルのハッシュの値を保存できないと仮定します。これは、トリガーまたは計算列をサポートしないCCIです(他の問題もありますが、これには入りたくありません)。 HASHBYTESSQL CLR関数を使用してシミュレートするスケーラブルな方法は何ですか?私の目標は、大規模なサーバーでできる限り多くのハッシュを毎秒取得することであると表現できるため、パフォーマンスも重要です。私はCLRがひどいので、これを達成する方法がわかりません。誰かに答える動機があれば、できるだけ早くこの質問に報奨金を追加する予定です。以下は、ユースケースを非常に大まかに示すクエリの例です。 DROP TABLE IF EXISTS #CHANGED_IDS; SELECT stg.ID INTO #CHANGED_IDS FROM ( SELECT ID, CAST( HASHBYTES ('SHA2_256', CAST(FK1 AS NVARCHAR(19)) + CAST(FK2 AS NVARCHAR(19)) + CAST(FK3 AS NVARCHAR(19)) + CAST(FK4 AS NVARCHAR(19)) + CAST(FK5 …

3
使用する他のデータベースの内部ストアドプロシージャ用の中央CLRストアドプロシージャ/関数リポジトリライブラリを設定しますか?
C#CLRで開発したコードを使用して、システム上のすべてのデータベースで使用できるようにしたいので、それぞれを信頼できるものに設定し、CLRをオンにして、それぞれに同じコードの束を保持する必要はありません。 。 管理およびセキュリティの観点からこれを行う最良の方法はありますか?CLR関数は、文字列ブレーカー、電子メール検証、url en / decode、base64などのように非常に基本的です。各データベースのdboスキーマのみが関数にアクセスできるようにしたいと思います。 これを行う簡単な方法はありますか? また、CLR dllが埋め込まれているかどうか、およびデータベースを移動する場合、タグが一緒に移動するか、dllも移動する必要があるかどうかはわかりません。 ありがとう

3
SQL Server CLRのサードパーティdll
SQL Server CLRのトリガーc#コードでサードパーティのDLLを使用する必要があります しかし、参照を追加しようとすると、SQL ServerからのDLLが表示されるだけです。 サードパーティのdllをSQL Server に追加するにはどうすればよいですか?
14 sql-server  c#  sql-clr 

2
SQL Server 2014(Windows 2012R2)でのCLRのクラッシュ
列内の文字列に対してRegEX関数を実行するこの小さなCLRがあります。 Windows Server 2012R2上のSQL Server 2014(12.0.2000)で実行すると、プロセスがクラッシュします メッセージ0、レベル11、状態0、行0現在のコマンドで重大なエラーが発生しました。結果があれば、破棄する必要があります。 スタックダンプを提供します select count (*) from table where (CLRREGEX,'Regex') しかし、私がするとき select * from table where (CLRREGEX,'Regex') 行を返します。 Windows 8.1で実行されている同じSQL Serverビルドで完全に動作します。 何か案は? -編集それはできる限り簡単です using System; using System.Collections.Generic; using System.Text; using System.Data.SqlTypes; //SqlString, SqlInt32, SqlBoolean using System.Text.RegularExpressions; //Match, Regex using Microsoft.SqlServer.Server; //SqlFunctionAttribute public partial class UserDefinedFunctions …


2
IPアドレスの保存-varchar(45)とvarbinary(16)
2つのフィールド(IDas BIGINTおよびIPAddressas varchar(45)またはor)を持つテーブルを作成しますvarbinary(16)。アイデアは、すべての一意のIPアドレスを保存し、他のテーブルのID実際のIPアドレスの代わりに参照を使用することIP addressです。 一般的に、ID与えられたforを返す、IP addressまたは(アドレスが見つからなかった場合は)アドレスを挿入して生成されたを返すストアドプロシージャを作成しますID。 多くのレコードがあることを期待しています(正確な数はわかりません)が、上記のストアドプロシージャをできるだけ速く実行する必要があります。それで、実際のIPアドレスをテキストまたはバイト形式で保存する方法を知りたいです。どっちがいいの? SQL CLRIPアドレスのバイトを文字列に変換したり、その逆を行ったりするための関数をすでに作成しているため、変換は問題ではありません(IPv4およびの両方で機能しますIPv6)。 検索を最適化するためにインデックスを作成する必要があると思いIP addressますが、クラスター化インデックスにフィールドを含める必要があるのか、または別のインデックスを作成し、どのタイプで検索を高速化するのかわかりませんか?

2
SQL CLRを使用したセキュリティまたはパフォーマンスのリスク[終了]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 SQL ServerでCLRを使用する際に、特定のセキュリティまたはパフォーマンスのリスクはありますか?


1
SQL Server Management Studio(SSMS)内のアクティビティモニターのSQLCLR待機タイプとは何ですか?
SQL Prodサーバーをチェックすると、アクティビティモニターを開くたびSQLCLRに、アクティビティモニターのリソース待機セクションの最初のリストに常に表示されます。それは常に高い数を持っています。何のSQLCLRため?SQLCLRアクティビティモニターでリソース待機数が多いサーバーに問題がありますか?

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
hierarchyid CLRはオープンソースですか?
組み込みのhierarchyidは、パスを効率的なバイナリ形式で格納し、その他の便利な機能を提供するCLRです。 残念ながら、表現されたパスの深さには制限があり、バイナリツリーの場合は〜1427です。この制限に達することになっている複雑な既存のアプリケーションの制限を増やしたいと思います。タイプのインターフェースを変更したくありません。結果として変更する必要のあるすべてのコードに微妙なバグを導入せずに、型のインターフェイスを変更できるとは思えません。 (理論的には)hierarchyidと同じインターフェイスを実装する「binhierarchyid」CLR UDTを作成できますが、バイナリツリーのみをサポートします。これにより、900バイトの制限内にとどまったまま、深度が7000に達するはずです。それがどれほどの規模の事業になるかはわかりません。 このhierarchyid CLRのソースはどこかにありますか?

1
複数の結果セットに対するdm_exec_describe_first_result_set_for_object
ストアドプロシージャのすべての結果セットのメタデータを返すプロシージャはありますか? のようなものsys.dm_exec_describe_first_result_set_for_objectですが、すべての結果セットについてですか? 最終的には、データベース内のすべてのストアドプロシージャのすべての結果セットのメタデータを発見したいと思います。とりあえず、sys.dm_exec_describe_first_result_set_for_object説明できない結果セットのみで解決します。つまり、2番目、3番目、およびN番目の結果セットです。 SQLCLRを使用してこれを行う方法を見てみましょう。 複数の結果セットを含むプロシージャの結果を保存する方法 tSQLt-SQL ServerのDBユニットテスト-ResultSetFilter.cs

3
アセンブリ 'system.web、version = 4.0.0.0、culture = neutral、publickeytoken = b03f5f7f11d50a3a。' SQLカタログで見つかりませんでした
System.WebのHTTPUtility.UrlDecodeメソッドを使用してSQL CLR関数をデプロイしようとしていますが、デプロイできません。受け取ったエラー: .Net SqlClientデータプロバイダー:メッセージ6503、レベル16、状態12、行1アセンブリ 'system.web、version = 4.0.0.0、culture = neutral、publickeytoken = b03f5f7f11d50a3a。' SQLカタログで見つかりませんでした。 機能(SSDTプロジェクトの一部として): using System; using System.Web; using System.Data; using System.Data.SqlClient; using System.Data.SqlTypes; using Microsoft.SqlServer.Server; public partial class UserDefinedFunctions { [Microsoft.SqlServer.Server.SqlFunction(IsDeterministic = true)] public static SqlString udf_UrlDecode(SqlString encodedXML) { string decodedXML; decodedXML = HttpUtility.UrlDecode(encodedXML.ToString()); return new SqlString(decodedXML); } } このスレッドに関連しています。私はVS2012 …

1
sqlprojの参照アセンブリがサーバーにデプロイされていません
fastJSONの変更バージョンを参照として使用するVisual Studio 2013データベースプロジェクトがあります。次のスクリーンショットに示すように、参照プロパティで[DDLの生成]を選択しました。 そして.sqlproj msbuildファイルで: <Reference Include="fastJSON"> <HintPath>..\..\fastjson\output\net40\fastJSON.dll</HintPath> <GenerateSqlClrDdl>True</GenerateSqlClrDdl> </Reference> ただし、bin / debug / Project.sqlにはの行が含まれていませんCREATE ASSEMBLY fastJSON . . .。アセンブリを手動で追加すると、プロジェクトがデプロイされて実行されます。Visual Studioでアセンブリを展開するにはどうすればよいですか?

1
MS SQL Serverの日付タイプについて
以下を検討してください。 declare @dt datetime, @dt2 datetime2, @d date set @dt = '2013-01-01' set @dt2 = '2013-01-01' set @d = '2013-01-01' select convert(varbinary, @dt) as dt, convert(varbinary, @dt2) as dt2, convert(varbinary, @d) as d 出力: dt dt2 d ------------------ -------------------- -------- 0x0000A13900000000 0x07000000000094360B 0x94360B 今、私はすでにから理解ドキュメントdatetime小さい範囲を持っており、1753年1月1日から開始し、しばらくdatetime2してdateその開始日として0001-01-01を使用しています。 私も理解していない何か、ということですdatetimeが表示されますが、リトルエンディアンしばらくするdatetime2と、dateビッグエンディアンです。その場合、どうすれば適切に並べ替えることができますか? dateタイプによって表される整数の日数を知りたいかどうかを検討してください。あなたはこれを行うことができると思います: declare @d date set …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.