【发布时间】:2012-07-06 00:16:50
【问题描述】:
我有一个 C# 应用程序,它传入以下数据:
数据集 ID = 10; 用户 ID = 1; varnames = "'ACT97','ACTCHNG','ACTQTR2','ACTSCOR2'";
存储过程是:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[s_LockCheck]
-- Add the parameters for the stored procedure here
@varNames VARCHAR(max),
@datasetID INT,
@userID INT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON
SELECT COUNT(*) as locked FROM VarLocks WHERE var_name IN (@varNames) AND dataset_id = @datasetID AND user_id != @userID AND is_locked = 1
END
但是当我这样称呼它时,它会返回一个计数 0,而它应该高于这个值:
exec s_LockCheck "'ACT97','ACTCHNG','ACTQTR2','ACTSCOR2'", 88, 14
上面的每个 ACTXXX 都是列中的一个 varname,var_name。
为什么它没有正确执行 IN 子句?
【问题讨论】:
-
这可能对你有帮助:asheej.blogspot.com/2012/04/…
-
那是因为在 var_name 列中没有行有 "'ACT97','ACTCHNG','ACTQTR2','ACTSCOR2'" 字符串。您可能在那里只有单独的值,例如 ACT97 和 ACTQTR2,而不是您要检查的整个字符串。请参阅此处了解 IN 子句的工作原理:msdn.microsoft.com/en-us/library/ms177682.aspx
-
哪个 RDBMS?我问是因为有一种使用 PL/SQL 的简单方法。
-
哦,我需要知道如何单独传递它。我正在使用 MS SQL 2005
标签: c# sql sql-server-2005 stored-procedures