-2

我正在编写一个应用程序,并在 C# 中生成一个随机订单号,在执行插入语句之前,我需要验证没有重复的订单号。这是我的存储过程(它只是一个帮助解决这个问题的测试过程)

CREATE PROCEDURE Test$For$Dupes
   (@RandNum int)
AS
   declare @myNum int

   SELECT OrderNumber, COUNT(*) 
   FROM [TEST]
   WHERE OrderNumber = @RandNum

   IF(COUNT(*) < 1)
     SET @myNum = 0

   IF(COUNT(*) > 1)
     SET @myNum = 1

我想要完成的是,如果有重复我需要输出 1 并让我的 c# 代码重新生成一个随机数,如果没有重复,那么我需要输出 0,这样我就可以继续插入我的桌子。

几年前我就知道了这一点,但找不到我的代码,现在我想弄清楚这一点。有任何想法吗?

它还没有工作,我收到了这个错误:

消息 8120,级别 16,状态 1,过程 Test$For$Dupes,第 8
行列 'TEST.OrderNumber' 在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中

4

3 回答 3

1

这更有效一点,因为它在找到匹配项时停止查找表。而且我认为它更清楚。

 CREATE PROCEDURE Test$For$Dupes
    (
    @RandNum int
    )
    AS
    BEGIN

    IF EXISTS (SELECT 1 FROM [TEST] WHERE OrderNumber = @RandNum) 
         SELECT 1
    ELSE
         SELECT 0

    END

您会在 C# 端阅读此内容,例如:

    using (SqlConnection cnn = new SqlConnection(ConnectionString))
    {
        SqlCommand cmd = cnn.CreateCommand();
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "Test$For$Dupes";
        cmd.Parameters.AddWithValue("@RandNum", 100);
        return (int) cmd.ExecuteScalar()
    }
于 2013-08-31T18:26:28.193 回答
0

在您的代码中,您试图在 if 条件中比较Count(*)哪个不是变量。您需要声明一个变量并在查询中设置该变量,然后在if条件中比较该变量。因此,如果我纠正您的代码,它将是:

CREATE PROCEDURE Test$For$Dupes
(
@RandNum int
)
AS
Begin
declare @myNum int
declare @orderNoCount int

select @orderNoCount=COUNT(*) FROM [TEST]
WHERE OrderNumber = @RandNum

IF(@orderNoCount =< 1)
Set @myNum = 0
IF(@orderNoCount > 1)
SET @myNum = 1

END

在您的代码中,您缺少条件when ordernumber = 1...所以我也添加了该条件。

你也可以试试这个:

CREATE PROCEDURE Test$For$Dupes
(
@RandNum int
)
AS
BEGIN

IF (select Count(Distinct OrderNumber) FROM [TEST] WHERE OrderNumber = @RandNum) >= 1
Set @myNum = 1
ELSE
SET @myNum = 0

END
于 2013-08-31T18:07:23.033 回答
0

您甚至不需要if..else条件,只需使用以下代码:

CREATE PROCEDURE Test$For$Dupes
(
@RandNum int
)
AS
BEGIN
declare @myNum int

SELECT @myNum = CASE COUNT(*)
    WHEN 0 THEN 0
    ELSE 1
    END
FROM test
WHERE orderNumber = @RandNum
GROUP BY orderNumber

END

小提琴:http ://sqlfiddle.com/#!3/51a0e/22

于 2013-08-31T18:12:45.543 回答