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

Transact-SQL(T-SQL)は、Microsoft SQL ServerおよびSAPのSybaseで使用されるSQLの方言です。

3
SQL Server Management Studioを介して別のサーバーをマップする方法
コマンドを入力して別のサーバーをマップしようとしています EXEC xp_cmdshell 'NET USE H:\\568.256.8.358\backup_147 1234abc /USER:cranew /PERSISTENT:yes' これでエラーが発生しました: ネットワークパスが見つかりません しかし、別のサーバーを手動でマップすることができます。これを整理するのを手伝ってください。

2
文字列から数値以外の文字を削除するにはどうすればよいですか?
ユーザーがボックスに検索語を入力すると、その値がストアドプロシージャに渡され、データベース内のいくつかの異なるフィールドに対してチェックされます。これらのフィールドは、常に同じデータ型であるとは限りません。 1つのフィールド(電話番号)はすべての数字で構成されているため、チェックすると、.Net CLR関数を使用して文字列からすべての非数値文字が削除されます。 SELECT dbo.RegexReplace('(123)123-4567', '[^0-9]', '') 問題は、この関数が次のエラーで突然動作を停止することです。 メッセージ6533、レベル16、状態49、行2 AppDomain MyDBName.dbo [runtime] .1575はエスカレーションポリシーによってアンロードされ、 アプリケーションの一貫性。重要なリソースへのアクセス中にメモリ不足が発生しました。 System.Threading.ThreadAbortException:タイプの例外 'System.Threading.ThreadAbortException'がスローされました。 System.Threading.ThreadAbortException: このエラーについてMSDNに投稿された提案を試しましたが、まだ問題が発生しています。現時点では、64ビットサーバーに切り替えることはできません。 サーバーを再起動すると、サーバーが保持していたメモリが解放されることは知っていますが、本番環境では実行可能なソリューションではありません。 T-SQLのみを使用してSQL Server 2005で文字列から数値以外の文字を取り除く方法はありますか?

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
TSQLのパフォーマンス-値の最小値と最大値の間のJOIN
私が保存している2つのテーブルがあります。 IP範囲-国ルックアップテーブル 異なるIPからのリクエストのリスト IPはbigints として保存され、ルックアップのパフォーマンスが向上しました。 これはテーブル構造です: create table [dbo].[ip2country]( [begin_ip] [varchar](15) NOT NULL, [end_ip] [varchar](15) NOT NULL, [begin_num] [bigint] NOT NULL, [end_num] [bigint] NOT NULL, [IDCountry] [int] NULL, constraint [PK_ip2country] PRIMARY KEY CLUSTERED ( [begin_num] ASC, [end_num] ASC ) ) create table Request( Id int identity primary key, [Date] datetime, …

2
ストアドプロシージャの作成時にテーブルが存在する場合でも、遅延名前解決を強制する方法はありますか?
SQL Serverでストアドプロシージャを作成する場合、存在しないテーブルを参照できます。ただし、テーブルが存在する場合は、手順で参照するすべての列がそのテーブルに存在する必要があります(遅延名前解決)。 存在するかどうかに関係なく、プロシージャで参照されるすべてのテーブルの名前解決を遅らせるようにSQL Serverに指示することはできますか?一般的な構文チェックを維持したいので、可能であったとしても、ストアドプロシージャ定義をシステムテーブルにハッキングすることはできません。 私はこれを行うことを要求することは少し奇妙に思われるかもしれないと思うので、ここにいくつかの背景があります:C#で書かれたアプリケーションからテーブル定義とストアドプロシージャを自動生成し、SQLの必要に応じてコードを変更して変更を順序付けるのは非常に困難ですそれら。私のコードは、スキーマがトランザクション内で一貫していることを「保証」しますが、現在、テーブルカラムを定義する前に、それらを参照するストアドプロシージャを定義することは保証できません。 以下は、C#によって作成されたSQLの標準的な例であり、私が解決しようとしている問題を「例示」しています。 --Say this table already exists. CREATE TABLE myTable ( a NVARCHAR(MAX) ) GO --My C# code creates something like this BEGIN TRAN GO --the stored procedure gets generated first. CREATE PROCEDURE mySproc AS BEGIN SELECT a,b FROM myTable END --then the table update ALTER …

5
与えられた範囲の素数
最近、すべての素数(1〜100)を印刷するタスクが与えられました。私はそこに劇的に失敗しました。私のコード: Create Procedure PrintPrimeNumbers @startnum int, @endnum int AS BEGIN Declare @a INT; Declare @i INT = 1 ( Select a = @startnum / 2; WHILE @i<@a BEGIN @startnum%(@a-@i) i=i+1; ) END 完成せずに終わってしまいましたが、データベース(SQL Server 2008 R2)でこのようなプログラムを実行することは可能でしょうか。 はいの場合、どのように終了する可能性があります。

1
一時テーブルにデータをロードするときに最小限のログを取得します
データロードパフォーマンスガイドを読んでも、最小限のログを取得するためにクラスター化インデックスで定義された空の一時テーブルにTABLOCKテーブルヒントを追加する必要があるかどうかはまだわかりません。 一時テーブルは、SIMPLEリカバリモードで動作するTempDBで作成されるのは明らかなので、最小限のロギングの完璧な候補だと思いましたが、確認するための通路が見つかりません。 一時テーブルは最小限のロギングの候補です。そうであれば、永続テーブルに推奨されるTABLOCKヒントを追加する価値はありますか?

2
Transact-SQLでの対称差分演算?
私はいつもについて知られているUNIONSQLでのオペレータが、ごく最近、他の集合演算子があったことを発見し、INTERSECTそしてEXCEPT。4番目の大きな集合演算子である対称差(たとえば、の逆INTERSECT)を行う演算子を見つけることができませんでした。 私は次のようなものを使用して目的の出力を取得できるようです SELECT Field FROM A UNION SELECT Field FROM B EXCEPT SELECT Field FROM A INTERSECT SELECT Field FROM B (私が優先権を正しく持っていると仮定して)、または反完全結合を実行することによって: SELECT A.Field, B.Field FROM A FULL JOIN B ON B.Id = A.Id WHERE B.Id IS NULL OR A.Id IS NULL しかし、これらはどちらも、特に他の3つの基本的な集合演算と比較して、かなり集中的なクエリのように見えます。SQLに対称差分演算はありますか?ドキュメントでそれを見つけることができませんか?それとも、T-SQLに実装する「標準的な」方法はありますか?
10 sql-server  t-sql 

4
T-SQL-条件が満たされるまでテーブルをループする最も効率的な方法は何ですか
の領域でプログラミングタスクを得ましたT-SQL。 仕事: 人々はエレベーターに乗りたいと思っています。 列に並んでいる順番で順番が決まります。 エレベーターの最大容量は1000ポンド以下です。 エレベーターが重くなる前にエレベーターに入ることができる最後の人の名前を返してください! 戻り型はテーブルでなければなりません 質問: この問題を解決する最も効率的な方法は何ですか?ループが正しい場合、改善の余地はありますか? 私はループと#一時テーブルを使用しました、ここで私の解決策: set rowcount 0 -- THE SOURCE TABLE "LINE" HAS THE SAME SCHEMA AS #RESULT AND #TEMP use Northwind go declare @sum int declare @curr int set @sum = 0 declare @id int IF OBJECT_ID('tempdb..#temp','u') IS NOT NULL DROP TABLE #temp …
10 sql-server  t-sql 

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
xml path( '')出力の場合
次を実行すると select t.type from (values ('Green'),('Blue'),('Red')) as t(type) for xml path('') この出力を受け取ります <type>Green</type> <type>Blue</type> <type>Red</type> 次を実行すると select t.type + '/' from (values ('Green'),('Blue'),('Red')) as t(type) for xml path('') この出力を受け取ります Green/Blue/Red/ selectに連結を追加すると、typeタグが削除され、xmlファイルの1行に出力されるのはなぜですか?SQL Server 2012を実行しています。

3
FROM句がなく、エラーにならないのはなぜですか?
そのため、タイプミスのあるサブクエリを含むクエリがあります。FROM句がありません。しかし、実行してもエラーにはなりません!なぜ!? SELECT 1 ,r.id ,'0D4133BE-C1B5-4141-AFAD-B171A2CCCE56' ,GETDATE() ,1 ,'Y' ,'N' ,oldItem.can_view ,oldItem.can_update FROM Role r JOIN RoleObject oldReport ON r.customer_id = oldReport.customer_id JOIN RoleItem oldItem ON oldReport.id = oldItem.role_object_id AND r.id = oldItem.role_id WHERE r.id NOT IN (SELECT role_id WHERE role_object_id = '0D4133BE-C1B5-4141-AFAD-B171A2CCCE56') AND oldReport.id = '169BA22F-1614-4EBA-AF45-18E333C54C6C'

3
実際の変更でのみ発生するT-SQLトリガーはどのように作成されますか?
別のテーブルに行を追加するUPDATEおよびINSERTのテーブルトリガーがあります。4つの列のいずれかが変更された場合にのみ行を追加する必要があります。IF UPDATE(col)を使用して変更をテストしようとしましたが、盲点がありました。これは、いくつかの値が入ったことをテストするだけです。深く掘り下げる必要があります。新旧の値を比較して、真の変化が発生したことを確認する必要があります。INSERTとUPDATEの両方で機能する必要があります。 挿入されたテーブルと削除されたテーブルの両方にトリガー内で比較できる値があるため、簡単なUPDATEの場合。ただし、INSERTの場合、値を持つのは挿入テーブルだけです。これはすべて同じトリガーで必要なので、そのINSERTケースをどのように処理しますか? これが、変更するトリガーのスクリプトです。 ALTER TRIGGER [dbo].[trATPerson_alter] ON [mydb].[dbo].[AT_Person] AFTER INSERT,UPDATE AS BEGIN SET NOCOUNT ON; -- Not all updates require a push IF (UPDATE([First_Name]) OR UPDATE([Last_Name]) OR UPDATE([JobCode]) OR UPDATE([Inactive])) BEGIN INSERT INTO [mydb].[dbo].[AT_Person_To_Push] ( [Facility], [VendorID], [Person_code], [First_Name], [Last_Name], [JobCode], [Alink], [Inactive] ) SELECT [Facility], [VendorID], [Person_code], [First_Name], …
9 t-sql  trigger 

5
ワイルドカード「[]」を使用して、](角かっこ)とPATINDEXを一致させる
T-SQL †でカスタムJSONパーサーを作成しています。 私のパーサーのために、PATINDEXトークンのリストからトークンの位置を計算する関数を使用しています。私の場合のトークンはすべて1文字で、次のものが含まれています。 {} []:、 通常、与えられたいくつかの文字の(最初の)位置を見つける必要があるときは、次のPATINDEXような関数を使用します。 PATINDEX('%[abc]%', SourceString) この関数はその後、私の最初の位置を与えるaか、bまたはcに-最初に発見される早い方- SourceString。 今、私の場合の問題は]キャラクターに関連しているようです。文字リストで指定するとすぐに、たとえば次のようになります。 PATINDEX('%[[]{}:,]%', SourceString) 関数が一致を見つけられないため、私の意図したパターンは明らかに壊れています。私が最初に脱出する方法が必要ですように見えます]ので、PATINDEX検索文字ではなく、特別なシンボルの一つとして扱い、それを。 私は同様の問題について尋ねるこの質問を見つけました: LIKE演算子と角かっこが必要です ただし、その場合、]単に1文字であり、大括弧なしで指定できるため、大括弧で指定する必要はありません。エスケープ使用しない別の解決策は、だけのために働くLIKEといないためPATINDEX、それが使用しているため、ESCAPE後者によって前者としないことによってサポートされ、副次句を。 だから、私の質問は、ワイルドカードを使用してを探す方法はありますか?]PATINDEX[ ]または、他のTransact-SQLツールを使用してその機能をエミュレートする方法はありますか? 追加情報 上記PATINDEXの[…]パターンで使用する必要があるクエリの例を次に示します。ここのパターンは(多少ではありますが)機能し]ます。文字が含まれていないためです。私もそれを使用する必要があり]ます: WITH data AS (SELECT CAST('{"f1":["v1","v2"],"f2":"v3"}' AS varchar(max)) AS ResponseJSON), parser AS ( SELECT Level = 1, OpenClose = 1, P = p.P, S = SUBSTRING(d.ResponseJSON, 1, NULLIF(p.P, 0) - …

4
SET TRANSACTION ISOLATION LEVEL SERIALIZABLEの後にコミットされた読み取りを追加しますか?
ストアドプロシージャの内部には、次のものがあります。(SQL Server 2008) SET TRANSACTION ISOLATION LEVEL SERIALIZABLE BEGIN TRANSACTION getStuff BEGIN TRY /* some selects, updates, etc, etc. */ .... COMMIT TRANSACTION getStuff END TRY BEGIN CATCH ... END CATCH これはトランザクションベースであるため、残りのデータベース接続はSERIALIZABLEの影響を受けないだろうと私は考えました。 コミット後にコミットされた読み取りに暗黙的に分離レベルを設定する必要がありますか?これは、アプリケーションサーバーとデータベースサーバー間の他の接続に悪影響を及ぼしますか?

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