データベース管理者

データベースのスキルを向上させ、コミュニティの他の人から学びたいデータベースの専門家向けのQ&A

1
varbinaryデータがdatalengthとして2000より大きい場合、sys.fn_varbintohexstrはNULLを返します
VARBINARYデータ長が2000までの場合、sys.fn_varbintohexstrは正常に動作します。それが2000より大きい場合、関数sys.fn_varbintohexstrは結果としてNULLを返します。何が欠けていますか? DECLARE @testvarbinary VARBINARY(MAX) SELECT @testvarbinary = 0xFFD8FFE000104A46494600010100000100010000FFDB004300090607080706090807080A0A090B0D160F0D0C0C0D1B14151016201D2222201D1F1F2428342C242631271F1F2D3D2D3135373A3A3A232B3F443F384334393A37FFDB0043010A0A0A0D0C0D1A0F0F1A37251F253737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737FFC0001108007E005C03012200021101031101FFC4001B00000301010101010000000000000000000405060302010007FFC4003A100002010302030407080103050000000001020300041105211231411322516106718191A1B1D11423324252C1E1F03315247243A2D2E2F1FFC4001801000301010000000000000000000000000102030004FFC4001F1100020202020301000000000000000000000102112131034104122251FFDA000C03010002110311003F0096D26DAD2EB4BBBC1646E364000186380727C39FC2A05B218827383E35AC17B728922C7348A24FC60311C5EBACD237918051B9341D195A307C96C64D36D27499EE5FF0777AB31D97D746E97A4A16E39003C232CCC365AABD3AC85C42643C50D9A1FC58EF48454E53E91451B02B2D3ECED8810C4D7328DCB636ACF51BD78BBA63B751FA55B71EEA677921951A2B45FB3DA2F7709F89CF866A7353B66B6004B1852DBAC406E079D4AECA7AD0BEF6E44B8DB881DB0798F6D130D8D9DC420714EAF8DF707E9418B476513721C54C6C1256DE37E3239A9FA1D8D35D681562CBCD1A54FF0019627A6DBE3D54B5A09A26C12411E35FA1C68AD082008F6EF2F41E04797974A5BA9E991CE1C6386451B8E7ED1E345727E81C3B44A6188C926B48D805DCD75240CAC4374D8D0ECC1588C8F7D6AB1927583388851DEF7535D1ED8C8C5C292C7650694440C9270AEFBE6ACF4B8858E9C6E1C0E23B463CFC69E6E9118AB633D3AC3ED320B356C229E295C7C7E9EDA6F74DDB4B1D9DB2948D06000390AE74E84E9FA2F6B201DBCC3888EBBF214D74DB0105AB4B311DAB6ECC7E35CECE840B1DB2C518729961DD894F8D21BBD225BEBB62F9E007BCDD5CFD2AB228CDC66729C2A470C6BE0BFCD3286C91635D86E36DB993D6A6DB2918D91EBE8D3ADAA86C14639DFA5663D1E303A48991C2D8C8E87A57E866D87095C023C3C4560F64ACAF19C77971F434136525049123358B346268D543755C6C1BA8F51FDE95DCDB2B2F0AF351C51127703A827C460FBAAD161CA14FD6A41F261492F20026E3E1C296E21EDC1FEFAEA8883FC3F3DD52139ED00DCECC078D4DC9FE47C83CFC6AFB5CB2E195C22F5181ECC8F854BC964B2396006FCF90ABC1A233BD03E8B6FDADD2AE3CD8F80AB4B5B7FB76A76F6ABFE187BCD8F01CFE9483D1C80C61A4DB8B9EFF0001EFAAFD11560866BACE4B37086F21FD149C92B6371AA563591BB7BD8D3AF1777D7E34F6FA2ED3B2B31B2FE7C780E7F1DA907A384DDEA6D70C3B918E5E7FFC154AF8E29253D7BA0F90E7F1A9B781D2C9922069046ABDDD89F2F01FDF1A38292CB9F1A5F1DC3DAAF69716B2AAB9CF1819029B5ACB14F1C6F1B060C720D4D659D4B11356D872359B3F7D49D803BD17819C30A1E60983D3D7B51780ED500CF188AE4961D5587CA94EA30A8561D158EDE40E7E54E2ECF1C711CE79C648E9E1F3A5D749DBBA2EF97183EBE1A7E8E56B24BEA9171C6CC17246304788FEFC6A52EED1A3B9902120139D9B156F703B4B7CE7018FCC72A437363DBC9C5B02060ED4F1744E684DA70ECEC95B18E3CB7B05502B18748894ECDC238BD6DBFC89A5420FB94893C900A6BA903C10460EEC4B7B3181F0A57B19690EBD17FB8D34CA7F14CE5BD9FD1F1A375BBD92C6D2111A34B2960AA396FD727D64579A7C417B0B755FF181CBCBF9A6325A25DC87B400AA8C2F5A4BAD958C6DE09DB9D6B5A8EE96DD96D431E1EE8E271B8EA718F0F953CB2BB3C28C53B321B0E80EC0E456ADA45A63F0AE7C45613F6513A45100006DF029A4E2F48A45495DBB1D5EDE2A22F06E481B679D25D46FB4F8A45935092490A8FC11F1103D82B4BC950CF0E3903C8D793E97DB44F1A4AE9139058039CEF9FAD2C527B0BBAC1B417F61A8E9F33E9EEA5232090A4F74AF4DFD62BE231340413857CE7CBFA687D1B4DFB0B4D0AE7B29179F0E370303E1F2AD94F02A679E7869A5558219BC89EE515219106E63908DCF81A4174F2097EEC1E1C550DEA94B9BB5D8F112DFBD20C01CCD61582411333478EB9738E9B81464FF0079A84791DD5C03EFFE2B98814310DB90F6EDFCFC2BCE2FF7AF93B81CEB3322A74C7096F2DCB6C48DA8FB07E241BD4E25D715AA42A4E589DBCB63FC53BD31F85064E71492C1D3C237108E1E291B6E805235B888EA0BC6705F2513C05357B81FAB7C50C91DBBB481CA90472CF5A08A340DAB5C5BFDB638EDD959970C573838EB4E218CAC48C84B46C32A7C296358C0854C78CE3761CCFB69ADADC048C28C70A8C628E0D4CE269993209DFA1A5CEE385C83B238F767F9AD354982AB303D29569F722EDAE946E1635EBD467FF5A2B289F2A4A99C5F3715E7AD37F76FF2A9B983472B29C839A757127FBD018EE57F73F5A597E02DC927F300DCBDFF001CD325673CB07CD91328076046287656ED1F6C96C8DBD75B4985556272437BB72298DA409D8971F9188FDEB4B6088B349B9692FE78A418ECC285F31CC9F88AABB1DDCA13B11B5405F3CB6DE91433440FDE479651F98787C2ABF4EBF8EE22574700FCAB4E25B8A411AB5BDD9938ADA72D1E30571B8A1218AE480639FB391464E485F9D39B56ED46 select datalength(@testvarbinary) SELECT sys.fn_varbintohexstr(@testvarbinary)

1
filesortを回避することは可能ですか?
次のSELECTクエリで「一時的な使用」と「ファイルソートの使用」を回避することはできますか?それを行う方法がわかりません。 top_expireとプログラムの両方でインデックスを追加しようとしましたが、役に立ちませんでした。ORDERBYを使用すると、クエリは1秒以上かかり、ローカルホストでは0.003秒しかありません。 クエリ SELECT ad.*, p.link FROM (SELECT ad.* FROM mod_ad ad JOIN mod_ad_auta auta ON ad.id = auta.ad_id WHERE ad.active != 0 AND ad.usr_active != 0 AND ad.expire > 1371151608 AND ad.cat_id = '1' AND ad.price <= '10000' AND auta.rocnik BETWEEN '1950' AND '2013' AND auta.km BETWEEN '0' AND …

1
IF NOT NULLの場合はUPDATE、それ以外の場合はフィールドの値を保持
私はどういうわけかそれを動作させるように近いと思いますが、何らかの理由でまだエラーが発生します。 次のUPDATEクエリがあります。 UPDATE DeviceAttribute SET Details = CASE Name WHEN 'Accessories' THEN @Accessories WHEN 'Description' THEN @Description WHEN 'Specification' THEN @Specification ELSE Details END WHERE DeviceID = 10 パラメータは、さまざまなユーザーによって入力されます。私が今直面している問題は、単一のフィールドを更新したい場合でも、他のパラメーターを古いデータで埋めなければならないということです。したがって、私はオプションIF @parameter IS NULL THENを設定し、すでにDBに格納されている値を保持したいと考えています。私はいくつかの解決策を見つけようとしましたが、次のクエリのようなものが解決策のようですが、それを機能させることができません: UPDATE DeviceAttribute SET Details = CASE Name WHEN 'Accessories' IS NOT NULL THEN @Accessories WHEN 'Description' IS …

1
PostgreSQLデータベースの所有権とは
PostgreSQLデータベースを作成するとき、そのデータベースの所有者になる別のロールを割り当てることができます。新しい所有者はこのデータベースで何ができますか?助成金と比較してどうですか?
10 postgresql 

1
MySQL:大きな列に対する一意の制約
VARCHAR最大3071文字を保持できる列を含むInnoDBテーブルを作成しようとしています。UNIQUEこの列のデータに制約を課したいのですが。 MySQLはインデックスを使用して制約を強制しているようです。InnoDBでは、インデックスサイズは767バイトに制限されているように見えます- VARCHAR(3071)データを保持している列には十分ではありません。 最大データ長やInnoDBの使用に妥協することなく、データベースにデータの一意性を強制する方法についての考えはありますか?



3
どのように説明計画を取得しますか?
誰かが説明計画について少し説明してもらえますか、そしてどのようにしてクエリの説明計画を取得しますか?また、このためのユーティリティとして使用できるSQLスクリプトがあれば、それは素晴らしいことです。

2
ORDER BY CASE式での「変換失敗」エラー
'OrderBy'を 'OrderNumber'に設定した場合を除いて、次のストアドプロシージャがうまく機能します。 次のエラーが表示されます。nvarchar値 'SK11270'をデータ型intに変換するときに変換に失敗しました。 (SK11270は、nvarchar(50)であるOrderNumber列の値です) 他のOrderBy列で同じクエリを実行すると、正常に機能します。 私は完全に道に迷い、頭が痛い。誰もがこの問題を引き起こしている明らかな何かを見ることができますか? 任意のアイデアを事前にありがとう... リッチ これは機能します: sp_jobs '1','20','','JobNumber','ASC','97','True','True','True','True','True','True','True','True','True','False','True','False','True','False','0' これはしません: sp_jobs '1','20','','OrderNumber','ASC','97','True','True','True','True','True','True','True','True','True','False','True','False','True','False','0' PROCEDURE [dbo].[sp_Jobs] @PageNumber int, @PageSize int, @FilterExpression varchar(500), @OrderBy varchar(50), @OrderDirection varchar(50), @CustomerID int, @ShowNotSet bit, @ShowPlaced bit, @ShowProofed bit, @ShowReProofed bit, @ShowApproved bit, @ShowOnTime bit, @ShowLate bit, @ShowProblem bit, @ShowCompleted bit, @ShowDispatched bit, @ShowUnapproved …


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番目の部分(入力が正しくない場合)の処理方法がわかりません。

4
SQL Serverインデックスを意図的に断片化するにはどうすればよいですか?
私が持っているSQL Server 2017テストデータベースで意図的に不良インデックス条件を作成したいのですが、これらのメンテナンススクリプトをよりよく理解するためですか?SQL Serverのインデックスと統計のメンテナンス インデックスの整合性を損なったり、インデックスの断片化を増やしたりする高速/自動の方法はありますか?これを達成するために私が調べることができる有用なリソースを知っていますか?

1
MS SQL ServerのシーケンスにOracleのようなORDERパラメータがないのはなぜですか?
ドキュメントのCREATE SEQUENCET-SQLのため、あなたがいることを確認できCREATE SEQUENCEコマンドには、持っていないORDERパラメータを。 比較のためにCREATE SEQUENCE、ORDER/のNOORDERオプションを示すOracleのドキュメント: ORDER ORDERシーケンス番号が要求順に生成されることを保証することを指定します。この句は、シーケンス番号をタイムスタンプとして使用する場合に役立ちます。通常、主キーの生成に使用されるシーケンスでは、保証順序は重要ではありません。 ORDEROracle DatabaseをReal Application Clustersで使用している場合、順序付けられた生成を保証するためにのみ必要です。排他モードを使用している場合、シーケンス番号は常に順番に生成されます。 NOORDER NOORDER要求順にシーケンス番号が生成されることを保証しない場合に指定します。これがデフォルトです。 Microsoft SQL ServerはSEQUENCEsに強い順序付け制約を提供していますか?それともマイクロソフトはそれを一般的に重要とは考えていませんか?

2
外部キーの参照インデックスを変更する
私はこのようなものを持っています: CREATE TABLE T1 ( Id INT ... ,Constraint [PK_T1] PRIMARY KEY CLUSTERED [Id] ) CREATE TABLE T2 ( .... ,T1_Id INT NOT NULL ,CONSTRAINT [FK_T2_T1] FOREIGN KEY (T1_Id) REFERENCES T1(Id) ) パフォーマンス(およびデッドロック)の理由で、T1に新しいインデックスを作成しました CREATE UNIQUE NONCLUSTERED INDEX IX_T1_Id ON T1 (Id) しかし、どのインデックスがFKを参照しているかを確認すると、クラスター化インデックスを引き続き参照します。 select ix.index_id, ix.name as index_name, ix.type_desc as index_type_desc, …

1
既存のデータベースのFamilyGUIDを見つける方法
RESTOREコマンドを実行するとき、SQL Serverは既存のデータベースが別のデータベースによって上書きされないようにすることを理解しています。このチェックは、を使用してバイパスできますREPLACE。 SQL Serverがバックアップファイルを使用して、FamilyGUID復元されるデータベースが上書きされるデータベースと同じかどうかを判断することを理解しています。これは正しいです? 私FamilyGUIDはバックアップファイルのがを使用して決定できることを理解しています RESTORE headeronly FROM DISK = N'Q:\MyBackup.bak' しかし、どのようにして、上書きされているデータベースのFamilyGUIDを見つけることができますか?

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