1

そのテーブルの主キーを使用してデータベースからデータを取得しようとしています。問題は、各テーブルの主キーの名前が異なることです。

たとえば、ユーザーが従業員テーブルをプルアップしたい場合、主キーはEmp_IDです。次に、manufacturersテーブルをプルアップする必要があり、その主キーはManu_IDです。

情報は同じViewModelにプルアップされるため、すべてが動的である必要があります。

これがManufacturersテーブルを見る私のSQLステートメントです:

C#:

string strSQLconnection = (connectionString);
SqlConnection sqlConnection = new SqlConnection(strSQLconnection);

tableName = tableName + "AuditLogView";

sqlConnection.Open();
SqlCommand sqlCommand = new SqlCommand("SELECT *  FROM @tableName WHERE ManufacturersID = @primarykey", sqlConnection);
sqlCommand.Parameters.AddWithValue("@tablename", tableName);
sqlCommand.Parameters.AddWithValue("@primarykey", primaryKeyID);

SqlDataReader reader = sqlCommand.ExecuteReader();

ユーザーからの主キーやテーブル名など、これの一部はすでに動的に実装されています。テーブルで主キーを常に見つけることができれば、それは機能するはずです。これを行う方法はありますか?SQL Server2008R2を使用しています。どんな助けでも大歓迎です。

4

2 に答える 2

0

このクエリはpkey列名を取得します:

SELECT 
    cu.CONSTRAINT_NAME, 
    cu.COLUMN_NAME 
FROM 
    INFORMATION_SCHEMA.KEY_COLUMN_USAGE cu 
WHERE 
    EXISTS 
        (
            SELECT tc.* 
            FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc 
            WHERE 
                tc.CONSTRAINT_CATALOG = 'dbName' 
                AND tc.TABLE_NAME = 'tableName' 
                AND tc.CONSTRAINT_TYPE = 'PRIMARY KEY' 
                AND tc.CONSTRAINT_NAME = cu.CONSTRAINT_NAME 
        )
于 2013-03-13T13:55:06.010 に答える
0

それで、パラメータとしてテーブル名と列名を受け入れるジェネリッククエリを作成したいですか?

これを試して:

まず、ストアドプロシージャを作成します。このストアドプロシージャは、パラメータに基づいてジェネリッククエリを作成します。

-- @tabName = table name
-- @colName = column name
-- @colVal = column value
create proc p1 @tabName varchar(100), @colName varchar(100), @colVal varchar(100)
as
begin
    declare @sql nvarchar(max) = N'select * from ' + @tabName + ' where ' + @colName + ' = ''' + @colVal + ''''
    exec sp_executesql @sql 
end

次に、コードからそのストアドプロシージャを呼び出します。

string strSQLconnection = (connectionString);
SqlConnection sqlConnection = new SqlConnection(strSQLconnection);
sqlConnection.Open();
SqlCommand sqlCommand = new SqlCommand("p1", sqlConnection);
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.Parameters.AddWithValue("@tabName", "table1");
sqlCommand.Parameters.AddWithValue("@colName", "col1");
sqlCommand.Parameters.AddWithValue("@colVal", "1");        

SqlDataReader reader = sqlCommand.ExecuteReader();


sqlConnection.Close();
于 2013-03-13T14:03:36.023 に答える