我有一个使用以下语法调用的 MS SQL 函数:
SELECT Field1, COUNT(*) AS RecordCount
FROM GetDecileTable('WHERE ClientID = 7 AND LocationName = ''Default'' ', 10)
第一个参数传递一个特定WHERE
子句,该子句由函数用于一个内部查询。当我在前端 C# 页面中调用此函数时,我需要为WHERE
子句内的各个字段发送参数值(在此示例中,两个字段都是ClientID
&LocationName
字段)
当前的 C# 代码如下所示:
String SQLText = "SELECT Field1, COUNT(*) AS RecordCount FROM GetDecileTable('WHERE
ClientID = @ClientID AND LocationName = @LocationName ',10)";
SqlCommand Cmd = new SqlCommand(SQLText, SqlConnection);
Cmd.Parameters.Add("@ClientID", SqlDbType.Int).Value = 7; // Insert real ClientID
Cmd.Parameters.Add("@LocationName", SqlDbType.NVarChar(20)).Value = "Default";
// Real code uses Location Name from user input
SqlDataReader reader = Cmd.ExecuteReader();
当我这样做时,我从 SQL 探查器获得以下代码:
exec sp_executesql N'SELECT Field1, COUNT(*) as RecordCount FROM GetDecileTable
(''WHERE ClientID = @ClientID AND LocationName = @LocationName '',10)',
N'@ClientID int,@LocationID nvarchar(20)',
@ClientID=7,@LocationName=N'Default'
当它执行时,SQL 抛出一个错误,它无法解析超过第一次提到必须定义@ClientID
标量变量的说明。如果我修改代码以首先声明变量(见下文),那么我在第二次提到该变量已经存在时@ClientID
会收到一个错误。@ClientID
exec sp_executesql N'DECLARE @ClientID int; DECLARE @LocationName nvarchar(20);
SELECT Field1, COUNT(*) as RecordCount FROM GetDecileTable
(''WHERE ClientID = @ClientID AND LocationName = @LocationName '',10)',
N'@ClientID int,@LocationName nvarchar(20)',
@ClientID=7,@LocationName=N'Default'
我知道当我从表中选择数据时,这种从 C# 添加参数和调用 SQL 代码的方法效果很好,但我不确定如何将参数嵌入WHERE
到传递给函数的嵌入子句的 ' 引号内。
有任何想法吗?