1

我有一个使用以下语法调用的 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到传递给函数的嵌入子句的 ' 引号内。

有任何想法吗?

4

1 回答 1

1

曾是

SELECT Field1, COUNT(*) AS RecordCount FROM GetDecileTable('WHERE
ClientID = @ClientID AND LocationName = @LocationName ',10)

应该

SELECT Field1, COUNT(*) AS RecordCount FROM GetDecileTable('WHERE
ClientID = ' + @ClientID + ' AND LocationName = ' + @LocationName,10)

您的变量在字符串中使用,它们被视为其中的一部分。

于 2010-03-30T13:45:02.733 回答