Совершенно новый для SQL Server и просто открыл прекрасный мир хранимых процедур - и это уже дает мне головную боль. Пришел сюда для помощи.Хранимая процедура SQL Server - C# PK - FK
Сценарий 1: после таблицы я написал хранимую процедуру и назову ее на C#, чтобы заполнить таблицу. Все работает так, как ожидалось.
Country SQL table looks like this
Хранимая процедура:
CREATE PROCEDURE [dbo].[InsertRecord2]
@countryname nvarchar(64),
AS
INSERT INTO Country(CountryName)
VALUES (@countryname)
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.ExecuteNonQuery();
_connection.Close();
}
Сценарий 2: Я хочу, чтобы создать представление SQL теперь состоит из предыдущего Country
таблицы и другой стол, назовем его City
. CountryID
, который является ПК для таблицы Country
, является FK в таблице City
.
Хранимая процедура:
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();
}
И здесь возникает проблема. Нажав на кнопку, я вижу исключение:
Дополнительная информация: Невозможно вставить значение NULL в столбец 'CountryID', table 'isg_cid.dbo.City'; столбец не допускает нулей. INSERT терпит неудачу.
Хорошо, это довольно очевидно - ПК не может быть NULL. Но, когда я попытался вставить в Country
стол, я не должен указать идентификатор (автоматическое приращение, автоматические семена включены), так
- почему я должен указать это на этот раз? и
- как я мог это сделать?
Я полагаю, что это должно быть сделано в хранимой процедуре как-то, и я уверен, что это довольно просто решить - для кого-то с большим опытом работы с SSMS. Для меня, это хлопот, чтобы понять, что делать.
Благодарим за помощь!
Можете ли вы дать создать таблицу сценариев для обеих таблиц – Surendra
Возвращает идентификатор из хранимой процедуры 1 и установить в хранимой процедуре 2 – mybirthname