使用存储过程时,我可以为参数添加默认值,例如:
@name varchar(50)= NULL
在.NET中使用参数化查询时,可以做类似的事情。
由于
答案 0 :(得分:0)
不确定您使用的是哪种语言,但我经常通过重载来处理此问题。我这样做是因为它将默认值集中在一个地方。:
//call this method if you have no value for name
void MyMethod()
{
string name = null;
MyMethod(name);
}
//call this when you want to assign a value to name
void MyMethod(string name)
{
//your normal code here where name is assigned as parameter value
}
答案 1 :(得分:0)
关于我能想到的唯一方法是(警告,未来的丑陋代码!):
SELECT column1, column2
FROM tabl1
WHERE column1 = ISNULL(@column1Parameter, column1)
另一种选择是在C#/ VB.net代码中包含一系列IF / ELSE块,例如:
public void MethodThatCallsParameterisedSql(string column1Value)
{
var command = new SqlCommand(PARAMETERISED_SQL_CONSTANT);
if (string.IsNullOrEmpty(column1Value))
{
command.Parameters.Add("@column1Value", DEFAULT_VALUE_FOR_COLUMN1);
}
else
{
command.Parameters.Add("@column1Value", column1Value);
}
}
答案 2 :(得分:0)
myCommand.SelectCommand.Parameters.Add("@name", SqlDbType.VarChar, 50);
if (Name == NULL)
myCommand.SelectCommand.Parameters["@name"].Value = NAME_DEFAULT_VALUE;
else
myCommand.SelectCommand.Parameters["@name"].Value = Name;
答案 3 :(得分:0)
根本不设置它?
if (!string.IsNullOrEmpty(column1Value))
{
command.Parameters.Add("@column1", column1Value);
}
这就是我们对存储过程的可选参数所做的工作
对于仅使用序数参数而不是命名参数的某些提供程序,这可能不起作用。 SQL Server / .net使用命名参数
答案 4 :(得分:0)
您可以使用 DBNull.Value 来提供默认值。例如:
if(string.IsNullOrEmpty(name)){
//set default value
command.Parameters.Add("@name", DbType.String, 50).Value = DBNull.Value;
}
else
{
//set your parameter value
command.Parameters.Add("@name", DbType.String, 50).Value = name;
}