jQueryデータテーブルにCASE
を使用して複数のテーブルからデータを取得するためにSQL Serverにストアドプロシージャを作成しています。SQL Server:CTE内でCASEを使用するときにエイリアスを参照する方法 - データテーブルのサーバー側のクエリ
メッセージ207、レベル16、状態1、プロシージャgetAllQuotes、ラインにそれを作成しようとしたとき、私は次のエラーを取得しかし、これは私のクエリ
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROC [dbo].[getAllQuotes] @iDisplayLength int, @iDisplayStart int, @SortCol int, @SortDir nvarchar(10), @Search nvarchar(255), @Status nvarchar(20) = NULL AS BEGIN Declare @FirstRec int, @LastRec int Set @FirstRec = @iDisplayStart; Set @LastRec = @iDisplayStart + @iDisplayLength; WITH CTE_Quotes as ( SELECT ROW_NUMBER() OVER (Order by case when (@SortCol = 0 and @SortDir = 'asc') then QuoteID end asc, case when (@SortCol = 0 and @SortDir = 'desc') then QuoteID end desc, case when (@SortCol = 1 and @SortDir = 'asc') then QuoteDateTime end asc, case when (@SortCol = 1 and @SortDir = 'desc') then QuoteDateTime end desc, case when (@SortCol = 2 and @SortDir = 'asc') then CustomerType end asc, case when (@SortCol = 2 and @SortDir='desc') then CustomerType end desc, case when (@SortCol = 3 and @SortDir='asc') then CompanyName end asc, case when (@SortCol = 3 and @SortDir='desc') then CompanyName end desc, case when (@SortCol = 4 and @SortCol='asc') then ContactName end asc, case when (@SortCol = 4 and @SortCol='desc') then ContactName end desc, case when (@SortCol = 5 and @SortCol='asc') then Total end asc, case when (@SortCol = 5 and @SortCol='desc') then Total end desc, case when (@SortCol = 6 and @SortCol='asc') then QuoteBy end asc, case when (@SortCol = 6 and @SortCol='desc') then QuoteBy end desc, case when (@SortCol = 7 and @SortCol='asc') then Status end asc, case when (@SortCol = 7 and @SortCol='desc') then Status end desc ) as RowNum, COUNT(*) over() AS TotalCount, QuoteID, QuoteDateTime, CustomerType = CASE WHEN Flag = 'QuoteDB' THEN 'New Customer' WHEN Flag = 'LiveDB' THEN 'Existing Customer' END , CompanyName = CASE WHEN Flag = 'QuoteDB' THEN (SELECT CompanyName FROM dbo.Quote_Companies QCP WHERE QCP.CompanyID = QT.CompanyID) WHEN Flag = 'LiveDB' THEN (SELECT CompanyName FROM dbo.Companies CP WHERE CP.CompanyID = QT.CompanyID) END, ContactName = CASE WHEN Flag = 'QuoteDB' THEN (SELECT FirstName + ' ' + LastName FROM dbo.Quote_Contacts QCC WHERE QCC.ContactID = QT.ContactID) WHEN Flag = 'LiveDB' THEN (SELECT FirstName + ' ' + LastName FROM dbo.Contacts CT WHERE CT.ContactID = QT.ContactID) END, Total, QuoteBy, Status FROM dbo.QUOTE QT WHERE (@Search IS NULL Or QuoteID LIKE '%' + @Search + '%' or QuoteDateTime LIKE '%' + @Search + '%' or CustomerType LIKE '%' + @Search + '%' or CompanyName LIKE '%' + @Search + '%' or ContactName LIKE '%' + @Search + '%' or Total LIKE '%' + @Search + '%' or QuoteBy LIKE '%' + @Search + '%' or Status LIKE '%' + @Search + '%' ) AND Status = @Status ) SELECT * FROM CTE_Quotes WHERE RowNum > @FirstRec AND RowNum < @LastRec
エンド
です94
無効な列名 'CustomerType'です。メッセージレベル16、状態1、プロシージャgetAllQuotes、行95
無効な列名 'CompanyName'。メッセージレベル16、状態1、プロシージャgetAllQuotes、行96
無効な列名 'ContactName'。メッセージレベル16、状態1、プロシージャgetAllQuotes、行37
無効な列名 'CustomerType'。メッセージレベル16、状態1、プロシージャgetAllQuotes、行40
無効な列名 'CustomerType'。メッセージレベル16、状態1、プロシージャgetAllQuotes、行43
無効な列名 'CompanyName'。メッセージレベル16、状態1、プロシージャgetAllQuotes、行46
無効な列名 'CompanyName'。メッセージレベル16、状態1、プロシージャgetAllQuotes、行49
無効な列名 'ContactName'。メッセージレベル16、状態1、プロシージャgetAllQuotes、行52
無効な列名 'ContactName'。
誰でも私がこれらのエラーを修正する方法について教えてください。
エイリアスの参照方法についてはわかりません。
おかげ
ありがとうございます。私はその文書を読むつもりですが、その背後にある論理をいくらか理解することはできますが、私は自分のコードをまだ一貫したものにすることはできません。 – Saj
私は関数を実行することができましたが、結果は出てきますが、前には得られなかったエラーが発生します。プロシージャーまたは関数 'getAllQuotes'は、提供されなかったパラメーター '@Search'を要求します。 @Searchが空白の場合は、すべてのレコードを返すだけです – Saj
私はそれを解決しました。あなたの指導をありがとう – Saj