【发布时间】:2012-02-07 08:52:27
【问题描述】:
假设我登录后会提示输入名称和地址如何使用 Store 过程插入至少有 2 个相互链接的表的数据?
【问题讨论】:
标签: vb.net sql-server-2008 stored-procedures insert
假设我登录后会提示输入名称和地址如何使用 Store 过程插入至少有 2 个相互链接的表的数据?
【问题讨论】:
标签: vb.net sql-server-2008 stored-procedures insert
试试这样的:
CREATE PROC dbo.user_Add(
@username VARCHAR(50),
@password NVARCHAR(50)
)
AS
BEGIN
-- username should be unique
IF NOT EXISTS(SELECT TOP 1 1 FROM Login WHERE username = @username) BEGIN
INSERT INTO Login (username, password)
VALUES (@username, @password)
RETURN @@IDENTITY
END
ELSE BEGIN
-- already taken username should be handled somehow
RETURN 0
END
END
CREATE PROC dbo.user_StudentAdd(
@loginID INT,
@name NVARCHAR(50),
@addr NVARCHAR(100)
)
AS
BEGIN
-- add new record for new student
-- probably before you should check if student is not already exist
INSERT INTO Student (LoginID, [Student Name], [Student address])
VALUES (@loginID, @name, @addr)
-- returns new StudentID, you can also use `RETURN` to return StudentId (if you need it)
SELECT @@IDENTITY
END
作为你的作业,你可以编写第三个存储过程,它调用上面的两个
并在第二个中使用第一个的结果。提示 -- 使用 EXEC 分配返回的值
存储过程(这里有详细信息:http://msdn.microsoft.com/en-us/library/ms174998.aspx)。
我没有测试它,所以它可能由于拼写错误而失败。 另外我从来没有使用过里面有空格的列,所以我不知道如何处理它们。
我假设:
login 表中的记录)已存在,login.loginID 的值可访问(用户已登录)。还有一个更多——我不会使用带有空格(或非拉丁字符)的列名。
【讨论】:
"Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.",这是我的代码:StudentTableAdapter.user_StudentAdd(LibraryDataSet.Student, LoginIDTextBox.Text, Student_NameTextBox.Text, Student_addressTextBox.Text) 我不确定这里出了什么问题。