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

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

2
GROUP BYステートメントのワイルドカードが機能しないのはなぜですか?
次のSQLステートメントを機能させようとしていますが、構文エラーが発生します。 SELECT A.*, COUNT(B.foo) FROM TABLE1 A LEFT JOIN TABLE2 B ON A.PKey = B.FKey GROUP BY A.* ここで、Aは40列の幅の広いテーブルであり、可能であればGROUP BY句に各列名をリストしないようにします。同様のクエリを実行する必要のあるこのようなテーブルが多数あるため、ストアドプロシージャを作成する必要があります。これにアプローチする最良の方法は何ですか? MS SQL Server 2008を使用しています。

3
SELECTステートメントのOPTION FASTは何をしますか?
ステートメントOPTION (FAST XXX)内でクエリヒントが何をするかを掘り下げましたが、SELECTまだ混乱しています。MSDNによると: クエリが最初のnumber_rowsの高速取得のために最適化されることを指定します。これは非負の整数です。最初のnumber_rowsが返された後、クエリは実行を継続し、完全な結果セットを生成します。 私にとってそれはあまり意味がありませんが、基本的にクエリは最初のXXX行を本当に速く取得でき、残りは通常の速度で取得できますか? これについて考えさせられたMicrosoft Dynamicsクエリは次のとおりです。 select pjproj.project,pjproj.project_desc,pjproj.customer,pjproj.cpnyid from pjproj WITH (NOLOCK) where project like '%' order by project OPTION(FAST 500) 誰でもこのクエリヒントが何をしているのかを正確に説明できますか?それはそれを使用しないよりも有利です?

2
正の場合、すべてのアイテムを合計します。負の場合、それぞれを返します
SUM()すべての正の値のすべての正の値への方法を見つけnumてSUM()、すべての正の数と各負の数の個別の行を返す必要があります。以下にサンプルDDLを示します。 Create Table #Be ( id int , salesid int , num decimal(16,4) ) Insert Into #BE Values (1, 1, 12.32), (2, 1, -13.00), (3, 1, 14.00) , (4, 2, 12.12), (5, 2, 14.00), (6, 2, 21.23) , (7, 3, -12.32), (8,3, -43.23), (9, 3, -2.32) そして、これは私の希望する出力です(各salesidの正の数値SUM()と負の数値は個別の行を返します): salesid num 1 …

2
複数行で先行するコンマなしでCOALESCEを使用する方法は?
私は次を達成しようとしています: California | Los Angeles, San Francisco, Sacramento Florida | Jacksonville, Miami 残念ながら、私は「ロサンゼルス、サンフランシスコ、サクラメント、ジャクソンビル、マイアミ」を取得しています STUFF関数を使用して目的の結果を達成できますが、COALESCEを使用してよりクリーンな方法があるかどうか疑問に思っていましたか? STATE | CITY California | San Francisco California | Los Angeles California | Sacramento Florida | Miami Florida | Jacksonville DECLARE @col NVARCHAR(MAX); SELECT @col= COALESCE(@col, '') + ',' + city FROM tbl where city = …
27 sql-server  t-sql 

6
ONとWHEREのインデックスパフォーマンス
私は2つのテーブルを持っています @T1 TABLE ( Id INT, Date DATETIME ) @T2 TABLE ( Id INT, Date DATETIME ) これらのテーブルには、(Id、Date)に非クラスター化インデックスがあります そして、私はこれらのテーブルに参加します SELECT * FROM T1 AS t1 INNER JOIN T2 AS t2 ON t1.Id = t2.Id WHERE t1.Date <= GETDATE() AND t2.Date <= GETDATE() これは次のように書くこともできます SELECT * FROM T1 AS t1 INNER …

7
値が最後に変更された時間を見つけようとする
ID、値、および日付を持つテーブルがあります。この表には多くのID、値、および日付があります。 レコードはこのテーブルに定期的に挿入されます。IDは常に同じままですが、ときどき値が変更されます。 IDと値が変更された最新の時間を提供するクエリを作成するにはどうすればよいですか?注:値は常に増加します。 このサンプルデータから: Create Table Taco ( Taco_ID int, Taco_value int, Taco_date datetime) Insert INTO Taco Values (1, 1, '2012-07-01 00:00:01'), (1, 1, '2012-07-01 00:00:02'), (1, 1, '2012-07-01 00:00:03'), (1, 1, '2012-07-01 00:00:04'), (1, 2, '2012-07-01 00:00:05'), (1, 2, '2012-07-01 00:00:06'), (1, 2, '2012-07-01 00:00:07'), (1, 2, '2012-07-01 00:00:08') …

9
T-SQLを使用して、文字列が回文であるかどうかをテストします
私はT-SQLの初心者です。入力文字列が回文であるかどうかを判断します。回文がそうでない場合はoutput = 0、そうでない場合はoutput = 1です。私はまだ構文を理解しています。エラーメッセージも表示されません。T-SQLがどのように機能するかについてのより良い理解と知識を獲得し、より良くなるために、さまざまなソリューションとフィードバックを探しています-私はまだ学生です。 私が見ているように、鍵となるアイデアは、左端と右端の文字を互いに比較し、等しいかどうかを確認し、次に左から2番目の文字と最後から2番目の文字を比較することです。ループを実行します。文字が互いに等しい場合、続行します。最後に到達した場合は1を出力し、そうでない場合は0を出力します。 批判してください: CREATE function Palindrome( @String Char , @StringLength Int , @n Int , @Palindrome BIN , @StringLeftLength Int ) RETURNS Binary AS BEGIN SET @ n=1 SET @StringLength= Len(String) WHILE @StringLength - @n >1 IF Left(String,@n)=Right(String, @StringLength) SET @n =n+1 SET @StringLength =StringLength -1 …

3
「SELECT @@ IDENTITY」が小数を返すのはなぜですか?
Dapperを使用して、ASP.NET MVC 3(.NET 4.0)アプリケーションからSQL Server 2008 R2 Expressインスタンスに対して次のクエリを実行しています。 INSERT INTO Customers ( Type, Name, Address, ContactName, ContactNumber, ContactEmail, Supplier) VALUES ( @Type, @Name, @Address, @ContactName, @ContactNumber, @ContactEmail, @Supplier) SELECT @@IDENTITY への呼び出しconnection.Query<int>(sql, ...)は、無効なキャスト例外をスローしています。デバッグしましたが、DapperがGetValue返されたを呼び出す時点SqlDataReaderです。 の戻り値の型GetValueはObject、デバッガーショーでそれを検査し、それがボックス10進数であることを示します。 selectをに変更するとSELECT CAST(@@IDENTITY as int)、GetValueの戻り値はボックス化されたintになり、例外はスローされません。 Id列は間違いなくint型です。なぜSELECT @@IDENTITY小数を返すのですか? 追加情報: データベースは真新しいです。 Customersテーブルは、私がそれに追加した唯一のオブジェクトです。データベースには、他の(ユーザー)テーブル、ビュー、トリガー、またはストアドプロシージャはありません。 データベースには10行があり、IDは1,2,3,4,5,6,7,8,9,10です(つまり、列はintの制限を超えていません)。 私のテーブル定義は CREATE TABLE [dbo].[Customers]( [Id] [int] IDENTITY(1,1) …

1
LANGUAGEおよびDATEFORMATで安全な日付/時刻リテラル形式は何ですか?
それは多くの日付/時刻形式ことを実証することは容易であるほか、以下の2以上が原因SET LANGUAGE、SET DATEFORMAT、またはログインのデフォルト言語に誤解を受けやすいです。 yyyyMMdd -- unseparated, date only yyyy-MM-ddThh:mm:ss.fff -- date dash separated, date/time separated by T Tのないこの形式でさえ、有効なISO 8601形式のように見えますが、いくつかの言語では失敗します。 DECLARE @d varchar(32) = '2017-03-13 23:22:21.020'; SET LANGUAGE Deutsch; SELECT CONVERT(datetime, @d); SET LANGUAGE Français; SELECT CONVERT(datetime, @d); 結果: ドイツ連邦共和国の金型について。 メッセージ242、レベル16、状態3 備デア・Konvertierung eines varchar型-Datentyps einenのdatetime-Datentyp liegtデア・ワートaußerhalbデgültigenBereichsインチ フランセのラングパレドゥラングエストパセ。 Msg 242、レベル16、状態3 変換の種類日付の種類と日付の種類の制限なし。 今、これらは、英語で、月と日を置き換えて、次の日付コンポーネントを定式化したかのように失敗しますyyyy-dd-mm: …

4
データベースに挿入が1つしかない場合、可能なすべての列の組み合わせにインデックスを付けるのは悪いことですか?
私は、大規模な選択クエリを必要とするレポートシステムに取り組んでいますが、データベースは一度しか入力されていません。データベース管理システムはMicrosoft SQL Server 2017です。このようなシステムを設計するより良い方法はおそらくありますが、理論的にこれにアプローチしましょう。 理論的に言えば: 非常に大きなデータベース(複数のテーブルに1億5000万行以上)がある場合 また、データベースには一度しかデータが入力されないと想定できます。 可能なすべての列の組み合わせにインデックスを付けると、選択クエリのパフォーマンスに悪影響が出る可能性がありますか?

1
SQL Serverで「No Join Predicate」とはどういう意味ですか?
MSDN「Missing Join Predicate Event Class」は、「結合述語のないクエリが実行されていることを示しています」と述べています。 しかし、残念ながら、それほど簡単ではないようです。 たとえば、非常に単純な状況: create table #temp1(i int); create table #temp2(i int); Select * from #temp1, #temp2 option (recompile); テーブルにはデータがなく、警告もありませんが、明らかに結合述語はありません。 私はSQL Server 2005の(同じリンク、ちょうど他のサーバーバージョン)のドキュメントを見てみる場合は、余分な文章があります:「このイベントはの両側が1行以上のリターンに参加した場合にのみ生成されます。」これはなるだろう前の状況での完全な意味。データがないため、両側は0行を返し、警告を返しません。行を挿入すると、警告が表示されます。うんいいね。 しかし、次の混乱する状況のために、両方のテーブルに同じ値を挿入します。 Insert into #temp1 (i) values (1) Insert into #temp1 (i) values (1) Insert into #temp2 (i) values (1) Insert into #temp2 (i) values …

1
0が空の文字列と等しいのはなぜですか?
次のT-SQLステートメントが返される理由1(true)を見つけるには、助けが必要です。 SELECT IIF( 0 = '', 1, 0) 誰かが動作の原因となっているANSIオプションなどを変更したと思いますSET ANSI_NULLS。 私の問題は、いくつかの値を結合していることです。最終行セットには、結合される値0と''値がありますが、これは正しくありません。

2
ON句の位置は実際にはどういう意味ですか?
通常のJOIN ... ON ...構文はよく知られています。ただし、対応するON句とは別に句を配置することもできJOINます。これは、実際にはめったに見られないものであり、チュートリアルにはありません。また、これが可能であると言及しているWebリソースも見つかりませんでした。 ここで遊ぶスクリプトは次のとおりです。 SELECT * INTO #widgets1 FROM (VALUES (1), (2), (3)) x(WidgetID) SELECT * INTO #widgets2 FROM (VALUES (1, 'SomeValue1'), (2, 'SomeValue2'), (3, 'SomeValue3')) x(WidgetID, SomeValue) SELECT * INTO #widgetProperties FROM (VALUES (1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')) x(WidgetID, PropertyName) --q1 SELECT w1.WidgetID, w2.SomeValue, wp.PropertyName …
23 sql-server  t-sql 

1
SQL Server Unicode / NVARCHAR文字列を絵文字または補助文字に設定するにはどうすればよいですか?
Unicodeコードポイントに基づいて特定の文字にUnicode文字列変数を設定します。 65535を超えるコードポイントを使用したいのですが、SQL Server 2008 R2データベースにはの照合順序がありSQL_Latin1_General_CP1_CI_ASます。 MicrosoftのNCHARドキュメントによると、NCHAR関数は次のように整数を取ります。 integer_expression データベースの照合に補助文字(SC)フラグが含まれていない場合、これは0〜65535(0〜0xFFFF)の正の整数です。この範囲外の値を指定すると、NULLが返されます。補助文字の詳細については、照合とUnicodeサポートを参照してください。 データベースの照合が補助文字(SC)フラグをサポートしている場合、これは0〜1114111(0〜0x10FFFF)の正の整数です。この範囲外の値を指定すると、NULLが返されます。 したがって、このコード: SELECT NCHAR(128512); NULLこのデータベースに戻ります。 これと同じものを返したい: SELECT N'😀'; 照合に「補助文字(SC)フラグが含まれていない」データベースで、コードを使用して(実際の絵文字を使用せずに)Unicode文字列変数(nvarcharなど)を絵文字に設定するにはどうすればよいですか? 絵文字Unicodeコードポイントの全リスト (最終的には、すべてのキャラクターが機能するようにします。参照しやすいように絵文字を選択しました。) (サーバーはSQL Server 2008 R2ですが、それ以降のバージョンのソリューションについても興味があります。) 方法がないと仮定して、適切な照合を備えた別のデータベースのインラインユーザー定義関数を参照できますか? 「補足文字」フラグを持つ照合を見つけるにはどうすればよいですか? これにより、サーバー上のレコードは返されません。 SELECT * FROM sys.fn_helpcollations() WHERE name LIKE 'SQL%[_]SC'; 動作するSQL Server 2012が導入されLatin1_General_100_CI_AS_SCたようです。古いインスタンスに照合をインストールできますか? 照合参照: SQL Serverのchar、nchar、varchar、nvarcharの違いは何ですか? マイクロソフトの補助文字照合情報 MicrosoftのSQL Server 2008 R2照合リスト 照合に関係なく、SQL Serverが拡張文字を理解して処理できる理由についての説明はありNCHARますか?

4
TSQLでテーブル作成スクリプトを生成する方法はありますか?
T-SQLのみで既存のテーブルから作成スクリプトを生成する方法はありますか(T-SQLはSMOにアクセスできないため、SMOを使用しません)。テーブル名を受け取り、指定されたテーブルの作成スクリプトを含む文字列を返すストアドプロシージャがあるとしますか? これにアプローチする別の方法があるかもしれないので、今私が直面している状況を説明させてください。数十のデータベースを持つインスタンスがあります。これらのデータベースはすべて同じスキーマ、すべて同じテーブル、インデックスなどを持っています。これらは、サードパーティのソフトウェアインストールの一部として作成されました。アドホックな方法でデータを集約できるように、それらを操作する方法が必要です。dba.seの素敵な人々がここですでに私を助けてくれました別のデータベースにトリガーを作成する方法は? 現在、すべてのデータベースのテーブルから選択を行う方法を見つける必要があります。という名前のテーブルにすべてのデータベース名を記録し、Databaseesそれらすべてに対してselectステートメントを実行する次のスクリプトを作成しました。 IF OBJECT_ID('tempdb..#tmp') IS NOT NULL DROP TABLE #tmp select * into #tmp from Database1.dbo.Table1 where 1=0 DECLARE @statement nvarchar(max) = N'insert into #tmp select * from Table1 where Column1=0 and Cloumn2 =1' DECLARE @LastDatabaseID INT SET @LastDatabaseID = 0 DECLARE @DatabaseNameToHandle varchar(60) DECLARE @DatabaseIDToHandle int SELECT TOP …

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