は値

2017-07-04 5 views
-1

私はテストテーブルは値

CREATE TABLE [dbo].[Questions](
[Qid] [int] IDENTITY(1,1) NOT NULL, 
[Tid] [int] NOT NULL, 
[Qtype] [int] NOT NULL, 
[Question] [nvarchar](max) NOT NULL, 
[isDelete] [bit] NULL, 

質問テーブルに外部キーなどがTIDの各テストのすべての質問として

CREATE TABLE [dbo].[Test](
[TestId] [int] IDENTITY(1,1) NOT NULL, 
[TestName] [nvarchar](50) NOT NULL, 
[UserId] [int] NOT NULL, 
[isDelete] [bit] NOT NULL, 

と質問表を持っているを選択するための手順クエリをストアド。

1つのストアドプロシージャで、各テストのTestName、TestId、および質問の数を取得するストアドプロシージャを記述したいと思います。しかし、私はこれを得ることができません。

+3

これでどのような問題が発生しましたか?あなたの作品を見せてください。 –

+1

これはテストや宿題の質問のようです...解決策を見つけて、コードを示して特定の問題について質問してください。だから私の仕事*プラットフォームではありません。 1つのヒント:純粋なクエリの場合は、 'VIEW'または*インラインテーブルの値を持つ関数*を使うべきです。 SPは**何かをする**を意味します。 – Shnugo

答えて

0

あなたはとしてストアドプロシージャを記述することができます:あなたは、特定のテストのために結果を取得したい場合は、@TestId INTとしてパラメータを渡すとGROUP BYWHERE T.[TestId] = @TestIdとしてWHERE句を追加し、

CREATE PROCEDURE [dbo].[procGetNumberofQuestionsForTest] 
AS 
BEGIN 
    SELECT T.[TestId], T.[TestName], COUNT(Q.[Qid]) AS NumberOfQuestions 
    FROM [dbo].[Test] T 
    JOIN [dbo].[Questions] Q ON Q.Tid = T.TestId 
    GROUP BY T.[TestId], T.[TestName] 
END 

+2

学生が宿題をするように励ましてください。 –

+0

これはSPでなく、VIEWまたは*インラインテーブルの値を持つ関数* ... – Shnugo

0

これを試してください(テーブルの作成、挿入、プロセスの作成と実行が含まれています)。

CREATE TABLE [dbo].[Test](
[TestId] [int] IDENTITY(1,1) NOT NULL, 
[TestName] [nvarchar](50) NOT NULL, 
[UserId] [int] NOT NULL, 
[isDelete] [bit] NOT NULL) 
go 
CREATE TABLE [dbo].[Questions](
[Qid] [int] IDENTITY(1,1) NOT NULL, 
[Tid] [int] NOT NULL, 
[Qtype] [int] NOT NULL, 
[Question] [nvarchar](max) NOT NULL, 
[isDelete] [bit] NULL 
) 
go 

insert into [dbo].[Test] 
values('test #1',1,0) 
go 
insert into [dbo].[Questions] 
values(1,1,'what is life',0) 
go 
create proc dbo.MyInfo 

as 

select 
    t.TestName, 
    t.TestId, 
    [No Questions]=COUNT(q.Qid) 
from 
    [dbo].[Test] t 
inner join 
    [dbo].[Questions] q on t.TestId=q.Qid 
group by 
    t.TestName, 
    t.TestId 
go 
exec dbo.MyInfo 
go 
+0

これはSPでなく、VIEWまたは*インラインテーブルの値を持つ関数であるべきではありません。*そして - 他の前にコメント - あなたは宿題をするように励ますべきです*。 – Shnugo

+0

SPになることができない技術的な理由はありません。私は個人的に見ることができますが、あなたはユースケースを知らない。私はその質問に答えました。私は今までにない見解がなくても、多くの商業プロジェクトに取り組んできましたが、実際にはSPもその義務を果たしています。 – JPF

+0

はい、私はこれらのプロジェクトも知っています。これは、SQL Serverがパラメータ化されたビューである*インラインTVF *を認識していなかった古い時代の優れたアプローチでした。もちろん、これはSP *でもかまいませんが、主にインライン性(索引!)がなく、次のステップでSPの結果を使用する不器用なアプローチに対して、多くの明白な(技術的な)理由があります。これは*古い手続き的思考*であり、新しいプロジェクトに使用すべきではありません。本当にSPが必要な場合は、どうしてもiTVFを使用してSPでラップすることができます。 – Shnugo