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

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


16
SQLステートメントのフィールドから先行ゼロを削除する
SQLServerデータベースから読み取り、抽出ファイルを生成するSQLクエリに取り組んでいます。単純なVARCHAR(10)フィールドである特定のフィールドから先行ゼロを削除するための要件の1つ。したがって、たとえば、フィールドに「00001A」が含まれている場合、SELECTステートメントはデータを「1A」として返す必要があります。 この方法で先行ゼロを簡単に削除する方法はSQLにありますか?RTRIM関数があることは知っていますが、これはスペースを削除するだけのようです。
98 sql  sql-server  tsql 

6
SQL更新クエリの集計関数ですか?
あるテーブルの値を別のテーブルの値の合計に設定しようとしています。これらの線に沿った何か: UPDATE table1 SET field1 = SUM(table2.field2) FROM table1 INNER JOIN table2 ON table1.field3 = table2.field3 GROUP BY table1.field3 もちろん、このスタンドとして、それは動作しません- SETサポートしていませんSUMし、それがサポートしていませんGROUP BY。 私はこれを知っているべきですが、私の心は空白を描いています。何が悪いのですか?
98 sql  sql-server  tsql 

9
どちらのSQLクエリが高速ですか?結合基準またはWhere句でフィルタリングしますか?
これら2つのクエリを比較します。結合基準またはWHERE句にフィルターを配置する方が高速ですか。可能な限り早い時点で結果セットが減少するため、結合基準の方が高速であると常に感じていましたが、確かではありません。 いくつかのテストを作成して確認しますが、どちらを読んだ方がわかりやすいかについても意見を聞きたかったのです。 クエリ1 SELECT * FROM TableA a INNER JOIN TableXRef x ON a.ID = x.TableAID INNER JOIN TableB b ON x.TableBID = b.ID WHERE a.ID = 1 /* <-- Filter here? */ クエリ2 SELECT * FROM TableA a INNER JOIN TableXRef x ON a.ID = x.TableAID AND a.ID = …

3
左外部結合から返されたデフォルトのnull値を置き換える
左外部結合を使用して3つのテーブルからデータを返すMicrosoft SQL Server 2008クエリがあります。多くの場合、2番目と3番目のテーブルにはデータがないため、左外部結合のデフォルトであると思うnullを取得します。selectステートメントのデフォルト値を置き換える方法はありますか?私はテーブル変数に選択できるという回避策がありますが、少し汚れているように感じます。 SELECT iar.Description, iai.Quantity, iai.Quantity * rpl.RegularPrice as 'Retail', iar.Compliance FROM InventoryAdjustmentReason iar LEFT OUTER JOIN InventoryAdjustmentItem iai on (iar.Id = iai.InventoryAdjustmentReasonId) LEFT OUTER JOIN Item i on (i.Id = iai.ItemId) LEFT OUTER JOIN ReportPriceLookup rpl on (rpl.SkuNumber = i.SkuNo) WHERE iar.StoreUse = 'yes' 可能であれば、QuantityとRegularPriceのデフォルトをゼロに設定します。

7
データベース内の任意のテーブルの任意の列で1つの値を検索します
char(64)1つのMS SQL Serverデータベース内の任意のテーブルの任意の列内で1つの値(私の場合はタイプのUID )を検索する方法はありますか? テーブルをどのようにリンクしなければならないかわからないまま、巨大なデータベースの前に座っています。それを見つけるために、すべてのテーブルと、任意の行に特定の値を含む列をリストしたいと思います。それは可能ですか? 1つの方法は、データベース全体をテキストファイルにダンプし、テキストエディターを使用して値を検索することです。ただし、データベースが大きすぎる場合、これは非常に困難です。
96 tsql 


8
TSQL-BEGIN .. ENDブロック内でGOを使用する方法
複数の開発データベースからステージング/プロダクションに変更を自動的に移行するためのスクリプトを生成しています。基本的に、これは一連の変更スクリプトを受け取り、それらを単一のスクリプトにマージして、各スクリプトをIF whatever BEGIN ... ENDステートメントにラップします。 ただし、一部のスクリプトではGOステートメントが必要になるため、たとえば、SQLパーサーは、作成後に新しい列を認識します。 ALTER TABLE dbo.EMPLOYEE ADD COLUMN EMP_IS_ADMIN BIT NOT NULL GO -- Necessary, or next line will generate "Unknown column: EMP_IS_ADMIN" UPDATE dbo.EMPLOYEE SET EMP_IS_ADMIN = whatever しかし、それをIFブロックでラップすると: IF whatever BEGIN ALTER TABLE dbo.EMPLOYEE ADD COLUMN EMP_IS_ADMIN BIT NOT NULL GO UPDATE dbo.EMPLOYEE SET EMP_IS_ADMIN …

14
SQL Serverで週の最初の日を取得する
集計した日付を週の最初の日として保存し、レコードを週ごとにグループ化しようとしています。ただし、日付を四捨五入するために使用する標準的な手法は、週では正しく機能しないようです(ただし、日、月、年、四半期、および私が適用した他の時間枠では機能します)。 SQLは次のとおりです。 select "start_of_week" = dateadd(week, datediff(week, 0, getdate()), 0); これは2011-08-22 00:00:00.000、日曜日ではなく月曜日であるを返します。を選択すると、日曜日のコードであるが@@datefirst返される7ので、サーバーは私の知る限り正しくセットアップされます。 上記のコードを次のように変更することで、これを簡単にバイパスできます。 select "start_of_week" = dateadd(week, datediff(week, 0, getdate()), -1); しかし、私がそのような例外を作らなければならないという事実は、私を少し不安にさせます。また、これが重複する質問である場合はお詫び申し上げます。私はいくつかの関連する質問を見つけましたが、この側面に特に対処するものはありませんでした。

5
列の一意の値ごとに最初の行のみを選択する方法
顧客の住所の表があるとします。 CName | AddressLine ------------------------------- John Smith | 123 Nowheresville Jane Doe | 456 Evergreen Terrace John Smith | 999 Somewhereelse Joe Bloggs | 1 Second Ave テーブルでは、John Smithのような1人の顧客が複数の住所を持つことができます。'CName'に重複がある最初の行のみを返すには、このテーブルの選択クエリが必要です。このテーブルでは、3番目を除くすべての行を返す必要があります(または1番目-これらの2つのアドレスのいずれでも問題ありませんが、返されるのは1つだけです)。SELECTクエリに追加して、サーバーが以前に列の値を見たことがあるかどうかに基づいてフィルタリングできるキーワードはありますか?


16
SQL-varcharデータ型を日時データ型に変換した結果、値が範囲外になりました
SQLを実行してデータ型の値をからvarcharに変換すると、次のエラーが発生しdatetimeます。 メッセージ242、レベル16、状態3、行1 varcharデータ型を日時データ型に変換すると、値が範囲外になりました。 データを確認しましたが、奇妙なことは何も表示されません。次のチェックを実行しましたが、すべて結果が返されませんでした。 SELECT [Date] from table where [DATe] is null SELECT [Date] from table where [DATe] = '' SELECT [Date] from table where LEN([date])> 10 SELECT [Date] from table where LEN([date])< 10 SELECT top 100 [Date] , SUBSTRING([date],4,2) from [table where convert(int, SUBSTRING([date],4,2)) < 1 or convert(int, SUBSTRING([date],4,2)) …

12
Microsoft tSQLで行が見つからない場合は値を返します
使用するマイクロソフトの SQLのバージョンを、ここに私の単純なクエリです。存在しないレコードをクエリすると、何も返されません。そのシナリオではfalse(0)が返されることを望みます。レコードを考慮しない最も簡単な方法を探します。 SELECT CASE WHEN S.Id IS NOT NULL AND S.Status = 1 AND (S.WebUserId = @WebUserId OR S.AllowUploads = 1) THEN 1 ELSE 0 END AS [Value] FROM Sites S WHERE S.Id = @SiteId
95 tsql 

4
T-SQLはストアドプロシージャのSELECTed値を取得します
T-SQLでは、これは許可されています。 DECLARE @SelectedValue int SELECT @SelectedValue = MyIntField FROM MyTable WHERE MyPrimaryKeyField = 1 そのため、SELECTの値を取得して変数に格納することができます(明らかにスカラーの場合)。 ストアドプロシージャに同じ選択ロジックを配置した場合: CREATE PROCEDURE GetMyInt AS SELECT MyIntField FROM MyTable WHERE MyPrimaryKeyField = 1 このストアドプロシージャの出力を取得して変数に格納できますか? 何かのようなもの: DECLARE @SelectedValue int SELECT @SelectedValue = EXEC GetMyInt (私はそれを試したので、上記の構文は許可されていません!)


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