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

T-SQL(Transact Structured Query Language)は、Sybase ASEおよびMicrosoft SQL ServerでサポートされるSQL機能の拡張です。MySQL、PostgreSql、Oracle(Pl / SQL)関連のクエリには、このタグを使用しないでください。LINQを使用して記述されているSQLコードもこのタグの一部ではないことに注意してください。このタグは、Microsoft SQL Serverを使用した高度なSQLプログラミング用に特別に作成されました。

13
SQLServerのすべてのデータベースファイルに関する情報の一覧表示
SQL Server上のすべてのデータベースのファイル(MDF / LDF)に関する情報を一覧表示することはできますか? どのデータベースがローカルディスク上のどのファイルを使用しているかを示すリストを取得したいのですが。 私が試したこと: exec sp_databases すべてのデータベース select * from sys.databases には、各データベースに関する多くの情報が表示されますが、残念ながら、各データベースで使用されているファイルは表示されません。 select * from sys.database_filesmasterデータベースのmdf / ldfファイルを表示しますが、他のデータベースは表示しません

9
INSERTとINSERTINTO
私はMSSQLでT-SQLを使用してしばらくの間、テーブルにデータを挿入する必要があるときはいつでも、構文を使用する傾向があります。 INSERT INTO myTable <something here> INTOここではキーワードはオプションであり、使用する必要はないことを理解していますが、私の場合はどういうわけか習慣になりました。 私の質問は: INSERT構文とを使用することの意味はありますINSERT INTOか? どれが標準に完全に準拠していますか? それらは両方ともSQL標準の他の実装で有効ですか?
90 sql  sql-server  tsql 


6
2つのデータベース間に外部キー関係を追加する
2つの異なるデータベースに2つのテーブルがあります。table1(database1)には、column1という列があり、これが主キーです。table2(database2)にcolumn2という列があり、それを外部キーとして追加したいと思います。 追加しようとすると、次のエラーが発生しました。 メッセージ1763、レベル16、状態0、行1 データベース間の外部キー参照はサポートされていません。外部キーDatabase2.table2。 メッセージ1750、レベル16、状態0、行1 制約を作成できませんでした。以前のエラーを参照してください。 テーブルは異なるデータベースにあるので、どうすればよいですか。


9
T-SQLで日時を文字列に変換する方法
この質問をここで見つけることができなかったことに驚いています。 日付時刻変数があり、それを文字列に変換して、別の文字列に追加できるようにしたいと考えています。簡単に日時に変換できる形式にしたい。 これどうやってするの? (日付部分と時間部分が必要です。)
89 sql-server  tsql 

7
SQL Serverの「テキスト」データ型のWHERE句
[CastleType]はSQL Serverでデータ型「テキスト」として設定されており、クエリは次のとおりです。 SELECT * FROM [Village] WHERE [CastleType] = 'foo' エラーが発生します: データ型TEXTとVARCHARは、等号演算子では互換性がありません。 このデータ型をWHERE句でクエリできませんか?

2
UPDLOCK、HOLDLOCKについて混乱している
テーブルヒントの使用法を調査しているときに、次の2つの質問に遭遇しました。 どのロックヒントを使用する必要がありますか(T-SQL)? HOLDLOCKはUPDLOCKにどのような影響を及ぼしますか? 両方の質問への回答は、を使用すると(UPDLOCK, HOLDLOCK)、他のプロセスがそのテーブルのデータを読み取ることができないと言っていますが、私はこれを見ませんでした。テストするために、テーブルを作成し、2つのSSMSウィンドウを起動しました。最初のウィンドウから、さまざまなテーブルヒントを使用してテーブルから選択したトランザクションを実行しました。トランザクションの実行中に、2番目のウィンドウからさまざまなステートメントを実行して、どれがブロックされるかを確認しました。 テストテーブル: CREATE TABLE [dbo].[Test]( [ID] [int] IDENTITY(1,1) NOT NULL, [Value] [nvarchar](50) NULL, CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] SSMSウィンドウ1から: BEGIN TRANSACTION SELECT …

7
T-SQL:既知の値の配列をループする
これが私のシナリオです: 特定のIDのセットで別のストアドプロシージャを呼び出す必要があるストアドプロシージャがあるとします。これを行う方法はありますか? つまり、これを行う必要がある代わりに: exec p_MyInnerProcedure 4 exec p_MyInnerProcedure 7 exec p_MyInnerProcedure 12 exec p_MyInnerProcedure 22 exec p_MyInnerProcedure 19 このようなことをする: *magic where I specify my list contains 4,7,12,22,19* DECLARE my_cursor CURSOR FAST_FORWARD FOR *magic select* OPEN my_cursor FETCH NEXT FROM my_cursor INTO @MyId WHILE @@FETCH_STATUS = 0 BEGIN exec p_MyInnerProcedure @MyId …
89 sql  sql-server  tsql 

6
Exists 1またはExists *を使用したサブクエリ
以前は、次のようにEXISTSチェックを記述していました。 IF EXISTS (SELECT * FROM TABLE WHERE Columns=@Filters) BEGIN UPDATE TABLE SET ColumnsX=ValuesX WHERE Where Columns=@Filters END 前世のDBAの1人が、EXISTS節を実行するときは、SELECT 1代わりにSELECT * IF EXISTS (SELECT 1 FROM TABLE WHERE Columns=@Filters) BEGIN UPDATE TABLE SET ColumnsX=ValuesX WHERE Columns=@Filters END これは本当に違いがありますか?
88 sql  sql-server  tsql 

2
varchar(max)変数の最大サイズ
過去のいつでも、誰かにの最大サイズを尋ねられたら、varchar(max)2GBと言ったか、より正確な数値(2 ^ 31-1、または2147483647)を調べたでしょう。 ただし、最近のいくつかのテストで、varchar(max)変数が明らかにこのサイズを超える可能性があることがわかりました。 create table T ( Val1 varchar(max) not null ) go declare @KMsg varchar(max) = REPLICATE('a',1024); declare @MMsg varchar(max) = REPLICATE(@KMsg,1024); declare @GMsg varchar(max) = REPLICATE(@MMsg,1024); declare @GGMMsg varchar(max) = @GMsg + @GMsg + @MMsg; select LEN(@GGMMsg) insert into T(Val1) select @GGMMsg select LEN(Val1) from T 結果: …
88 sql-server  tsql 

6
2点間の距離の計算(緯度、経度)
地図上の2つの位置間の距離を計算しようとしています。私はデータに保存しました:経度、緯度、X POS、Y POS。 以前は以下のスニペットを使用しています。 DECLARE @orig_lat DECIMAL DECLARE @orig_lng DECIMAL SET @orig_lat=53.381538 set @orig_lng=-1.463526 SELECT *, 3956 * 2 * ASIN( SQRT( POWER(SIN((@orig_lat - abs(dest.Latitude)) * pi()/180 / 2), 2) + COS(@orig_lng * pi()/180 ) * COS(abs(dest.Latitude) * pi()/180) * POWER(SIN((@orig_lng - dest.Longitude) * pi()/180 / 2), 2) )) AS …

1
カーソルループで使用するために複数の列をフェッチするにはどうすればよいですか?
カーソルループ内で次のSQLスニペットを実行しようとすると、 set @cmd = N'exec sp_rename ' + @test + N',' + RIGHT(@test,LEN(@test)-3) + '_Pct' + N',''COLUMN''' 次のメッセージが表示されます。 メッセージ15248、レベル11、状態1、プロシージャsp_rename、行213 パラメータ@objnameがあいまいであるか、要求された@objtype(COLUMN)が間違っています。 何が問題で、どうすれば修正できますか?列名を角かっこで囲ん[]でみました""が、検索結果の一部のように二重引用符で囲んでみました。 編集1- これがスクリプト全体です。テーブル名を名前変更spに渡すにはどうすればよいですか?列名は多くのテーブルの1つにあるため、その方法がわかりません。 BEGIN TRANSACTION declare @cnt int declare @test nvarchar(128) declare @cmd nvarchar(500) declare Tests cursor for SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE 'pct%' AND TABLE_NAME LIKE 'TestData%' …

4
DISTINCTを使用して可能なパーティション関数COUNT()OVER
次のように、個別のNumUsersの現在の合計を取得するために、次のように記述しようとしています。 NumUsers = COUNT(DISTINCT [UserAccountKey]) OVER (PARTITION BY [Mth]) 管理スタジオはこれについてあまり満足していないようです。DISTINCTキーワードを削除するとエラーは消えますが、明確なカウントにはなりません。 DISTINCTパーティション関数内では不可能のようです。個別のカウントを見つけるにはどうすればよいですか?相関サブクエリなど、より従来の方法を使用しますか? これをもう少し詳しく見てみると、これらのOVER関数は、現在のSQL-Server合計を計算するために使用できないという点で、Oracleとは異なる動作をする可能性があります。 ここSQLfiddleにライブの例を追加しました。ここでは、パーティション関数を使用して現在の合計を計算しようとしています。


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