2011-05-19 107 views
0

我非常了解SQL语句,例如select,insert,update和delete。不过,我对存储过程很陌生。SQL中的存储过程

我正在使用SQL Management Studio Express。

任何示例代码?例如,注册,一种将客户数据保存在数据库中的存储过程。

+2

在那里有问题吗?提示 - 如果你的“问题”中没有任何问号'?',可能不清楚你在问什么:) – JNK 2011-05-19 18:37:53

回答

2

有关使用优先存储过程嵌入式SQL的最好的事情正确的做法是,它们向独立于客户端代码的数据库提供可版本化的接口。它从客户端代码库中获取SQL,这意味着只要外部接口不会改变:参数,结果集等,DBA就可以自由地调整查询,甚至完全重新编码数据库模式,而无需更改客户端软件。

它也极大地简化了安全性。客户不需要授予基础表本身的权限。所有他们需要的是grant execute上的存储过程。

如果你只是写一个存储过程来包装简单的插入/更新/删除语句,那么你并没有太多的成就。存储过程应该代表更多逻辑操作。请记住,任何真实的数据库将长期存在用于访问它的软件。数据是永恒的;软件是暂时的。

0

不错的文章here解释如何避免SQL注入攻击。阅读添加注意事项。

把它的simpliest方式是paramaterise您所有的疑问像下面

using (SqlConnection connection = new SqlConnection(connectionString)) 
{ 
    DataSet userDataset = new DataSet(); 
    SqlDataAdapter myCommand = new SqlDataAdapter( 
      "LoginStoredProcedure", connection); 
    myCommand.SelectCommand.CommandType = CommandType.StoredProcedure; 
    myCommand.SelectCommand.Parameters.Add("@au_id", SqlDbType.VarChar, 11); 
    myCommand.SelectCommand.Parameters["@au_id"].Value = SSN.Text; 

    myCommand.Fill(userDataset); 
} 
0

这里有一个例子,你要求:

CREATE PROCEDURE MyTeste(@MyParam INT) 
AS BEGIN 
    SELECT * FROM MyTable WHERE CodTable = @MyParam; 
END; 

要经过5作为参数,另一个位置调用它,这样做:

EXEC MyTeste 5;