1

im pretty new in sql coding and i couldent find a solution on internet, heres my code:

CREATE PROCEDURE GET_SAMEDATE (@FileName VARCHAR(50))
AS
    /* SET NOCOUNT ON */
    SELECT Hash
    FROM   Beamer.PackageDetailFile A(NOLOCK)
           INNER JOIN(SELECT FileName,
                             MAX(Date) MaxDate
                      FROM   Beamer.PackageDetailFile(NOLOCK)
                      GROUP  BY FileName)B
             ON B.FileName = A.FileName
                AND A.Date = B.MaxDate
    WHERE  FileName = @FileName 

what i want to do is i want to compare the FileName with the filename i obtain from a c# class

And im also getting "Ambiguous column name 'FileName' "

* ambigious column name is resolved but still i cannot get the FileName from the other class to compare if they have the same filename

the c# code

SqlConnection myConnection = new SqlConnection(myConnectionString);

 SqlCommand myCommand = new SqlCommand("dbo.GET_SAMEDATE", myConnection );
 myCommand.CommandType = CommandType.StoredProcedure;
 try
 {
    myConnection.Open();
    SqlDataReader sdr = myCommand.ExecuteReader();

    while (sdr.Read())       
    {                   
        string h = (string)sdr.GetString(0);                     

        if (hash != h)
        {
           exists = true;
        }

       sdr.Read();
    }
4

3 に答える 3

1

句でテーブル接頭辞を指定する必要がありますWHEREGROUP BYとにかく、サブクエリで結合する必要はありません。それははるかに簡単に行うことができます。

CREATE PROCEDURE GET_SAMEDATE (@FileName VARCHAR(50))
AS
    SET NOCOUNT ON;

    SELECT TOP 1 WITH TIES Hash
    FROM   Beamer.PackageDetailFile
    WHERE  FileName = @FileName
    ORDER  BY Date DESC 
于 2012-07-11T10:31:44.193 に答える
1

WHERE節でFileNameは、A または B からのテーブルを指定する必要があります。

WHERE  FileName = @FileName 

したがって、次のいずれかです。

WHERE  A.FileName = @FileName 

また

WHERE  B.FileName = @FileName 
于 2012-07-11T10:32:07.097 に答える
0

ストアド プロシージャを実行する前に、パラメータ値を指定する必要があります。

myCommand.Parameters.AddWithValue("@FileName", hash)

Martin Smith が回答で提案したように、ストアド プロシージャを単純化することもできます。

すべてのコードを含めたわけではありませんが、sqlConnection、sqlDataReader、および sqlCommand オブジェクトを必ず破棄してください。これを行うには、"Using" ステートメントを使用できます。

于 2012-07-11T14:25:17.593 に答える