sp_msforeachtable.i を使用してデータベースのテーブルを一覧表示したい SSMS ではうまくいきましたが (sp_list2 ストアド プロシージャで記述しました)、このストアド プロシージャを C# で使用したい場合、データベースの最初のテーブルがリスト ボックスに返されます。
C# のコード:
SqlCommand cmd = cnn.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sp_list2";
SqlParameter inparam = cmd.Parameters.Add("@dbname", SqlDbType.NVarChar);
inparam.Direction = ParameterDirection.Input;
inparam.Value = "DB";
SqlDataReader rdr = cmd.ExecuteReader();
dap.SelectCommand = cmd;
while (rdr.Read())
{
listBox1.Items.Add(rdr[0]);//this is tables name
}
私のストアドプロシージャ:
create procedure sp_list2(@dbname nvarchar(max))
as
declare @query as nvarchar(max)
--declare @dbname as nvarchar(max)
SET @query=''
SET @query =@query + @dbname + '..sp_msforeachtable '' select ''''?'''' as ''''Table'''', count(*) as ''''Rows'''' from ? '''
EXEC sp_executesql @query