具有动态IN运算符和INT数据类型的SQL Server过程

问题描述 投票:0回答:3

我有一个带有一些基本销售信息的SQL Server表,如下所示

SaleID  |   TotalValue  |   PaymentMethod   |   User    |     Date
--------|---------------|-------------------|-----------|--------------
   1    |     10        |   CASH            |   USER 1  |   2020-01-01
   2    |     120       |   DEBIT CARD      |   USER 2  |   2020-01-01
   3    |     1000      |   CREDIT CARD     |   USER 2  |   2020-01-01
   4    |     305       |   CREDIT CARD     |   USER 1  |   2020-01-01
   5    |     15        |   CASH            |   USER 5  |   2020-01-01

我需要编写一个动态过程,其某种形式是能够使用SaleID数组作为过滤器来搜索销售信息。这是一个简单的选择查询,如下所示:

SELECT
     [SaleID]
    ,[TotalValue] as 'Total Value'
    ,[Date] as 'Date'
FROM
    [Sales]
WHERE
    [SaleID] in (1, 2, 3, 4)

我创建了以下存储过程,因此可以输入SalesID的数组:

CREATE PROCEDURE [dbo].[usp_SearchSales]
(
      @SaleID NVARCHAR(max)
)
AS
BEGIN

    SET NOCOUNT ON;  

    DECLARE @SQL NVARCHAR(MAX)
    DECLARE @ParameterDef NVARCHAR(500)

    SET @ParameterDef = '@SaleID NVARCHAR(max)'

SET @SQL = 'SELECT
                 [SaleID]
                ,[TotalValue]
                ,[PaymentMethod]
                ,[User]
                ,[Date]
            FROM
                [Sales]
            WHERE 
                -1=-1'

IF @SaleID IS NOT NULL
SET @SQL = @SQL+ ' AND SaleID in (@SaleID)'

EXEC sp_Executesql @SQL, @ParameterDef, @SaleID = @SaleID

END

GO

然后我通过Exec命令执行过程

EXEC [usp_SearchSales] @SaleID = '1, 2, 3, 4'
GO

然后该过程返回以下错误uppon执行:

消息245,级别16,状态1,过程usp_SearchSales,第26行[批处理开始第49行]

将nvarchar值'1、2、3、4'转换为数据类型int时转换失败。>

这里是一个SQL查询,用于在设计的表上创建并插入一些值

CREATE TABLE [Sales] (
    [SaleID] int,
    [TotalValue] float,
    [PaymentMethod] varchar(50),
    [User] varchar(50),
    [Date] date
)

insert into sales values (1, 10, 'CASH', 'USER 1', '2020-01-01')
insert into sales values (2, 120, 'DEBIT CARD', 'USER 2', '2020-01-01')
insert into sales values (3, 10000, 'CREDIT CARD', 'USER 2', '2020-01-01')
insert into sales values (4, 305, 'CREDIT CARD', 'USER 1', '2020-01-01')
insert into sales values (5, 15, 'CASH', 'USER 5', '2020-01-01')

我需要一些帮助来创建一个过程或类似的东西,其中,一组SalesID会向我返回这些Sales的Sales信息。

我有一个SQL Server表,其中包含一些基本的销售信息,如下所示SaleID |总价值|付款方式|用户|日期-------- | --------------- | ------------------- | ---- ------- | ---------...

sql sql-server tsql dynamic-sql dynamicquery
3个回答
2
投票

不幸的是,SQL Server本机不支持数组,这使您试图做起来非常困难(或麻烦)。


-1
投票

我相信你是对的。确实。


-2
投票

如下更改SP:

© www.soinside.com 2019 - 2024. All rights reserved.