SQL Serverにはまったく新しく、ストアドプロシージャの素晴らしい世界が見つかりました。ここに来て助けてください。SQL Serverのストアドプロシージャ - C#PK - FK
シナリオ1:テーブルを指定すると、ストアドプロシージャを作成してC#で呼び出してテーブルを作成しました。すべてが期待どおりに機能します。 C#
private void button1_Click(object sender, EventArgs e)
{
readonly SqlConnection _connection = new SqlConnection(@"Data Source=REXGBASQLP042;Initial Catalog=isg_cid;Integrated Security=True");
_connection.Open();
SqlCommand _command = _connection.CreateCommand();
_command.CommandType = CommandType.StoredProcedure;
_command.CommandText = "InsertRecord2";
_command.Parameters.Add("@countryname", SqlDbType.NVarChar).Value = countryname.Text;
_command.ExecuteNonQuery();
_connection.Close();
}
シナリオ2で呼び出す
CREATE PROCEDURE [dbo].[InsertRecord2]
@countryname nvarchar(64),
AS
INSERT INTO Country(CountryName)
VALUES (@countryname)
RETURN
:
Country SQL table looks like this
ストアドプロシージャの私は今、SQLビューを作成するには、以前のCountry
テーブルで構成され、別のテーブル、それをCity
としましょう。 Country
テーブルのPKであるCountryID
は、City
テーブルのFKです。
ストアドプロシージャ:
CREATE PROCEDURE [dbo].[InsertRecord2]
@countryname nvarchar(64),
@cityname nvarchar(64)
AS
INSERT INTO Country(CountryName)
VALUES (@countryname)
INSERT INTO City(CityName)
VALUES (@cityname)
RETURN
は、C#での呼び出し:ここ
private void button1_Click(object sender, EventArgs e)
{
readonly SqlConnection _connection = new SqlConnection(@"Data Source=REXGBASQLP042;Initial Catalog=isg_cid;Integrated Security=True");
_connection.Open();
SqlCommand _command = _connection.CreateCommand();
_command.CommandType = CommandType.StoredProcedure;
_command.CommandText = "InsertRecord2";
_command.Parameters.Add("@countryname", SqlDbType.NVarChar).Value = countryname.Text;
_command.Parameters.Add("@cityname", SqlDbType.NVarChar).Value = cityname.Text;
_command.ExecuteNonQuery();
_connection.Close();
}
とは、問題が来ます。ボタンをクリックすると、例外が表示されます。
追加情報:カラム 'CountryID'、テーブル 'isg_cid.dbo.City'に値NULLを挿入できません。列はNULLを許可しません。 INSERTは失敗します。
さて、PKはNULLにすることはできません。しかし、私はCountry
テーブルに挿入しようとしたとき、私はIDを指定する必要はありませんでした、(自動インクリメントを、自動シードがONに切り替え)、そう
- 私はそれをこの時間を指定しなければならないのはなぜですか?そして
- どうすればいいですか?
何とかストアドプロシージャで実行する必要があると思いますが、これは解決するのが簡単だと思います.SSMSの経験が豊富な人です。私にとって、何をすべきかを理解するのは面倒です。
ありがとうございました!
を有する第2のSPを変更する必要がありますが、テーブル、ストアドプロシージャ1からIDを返すストアドプロシージャ2 – Surendra
の両方のテーブル・スクリプトを作成し与えることができます。コードをコピーしましたが、これは構文エラーがあるようです。ここで画像を参照してください: http://imgur.com/a/xM0Dz 編集:私がSELECTを削除すると、それは完全に正常に動作します。ありがとうございました! – mybirthname