sql-server - 如何在存储过程中将测试数据表作为参数传递

标签 sql-server testing parameters datatables user-defined-types

我有一个要测试的存储过程。它使用一个已经创建的 User-Defined Table Type ([TicketFields]),它本质上只有一个名为 fieldNames 的列,其中包含 nvarchar 字段名称( '请求者姓名、请求者组织等...)。然后创建一个临时表,使用 @keyword 用户参数在所选字段名称中搜索该关键字。我的问题是,当我执行它进行测试时,我不能简单地插入一个 datatable 作为参数。

ALTER PROCEDURE [dbo].[bcasp_GetTicketsByKeyword] 
@Keyword nvarchar(150),
@fieldsTable [TicketsFields] READONLY 
AS
BEGIN
CREATE TABLE #Ticket(
    [ID] [bigint] NULL,
    [TicketNumber] [nvarchar](255) NULL,
    [Complexity] [nvarchar](255) NULL,
    [NatureOfInquiry] [nvarchar](255) NULL,
    [SMEResponseDetail] [nvarchar](255) NULL
)

declare @fieldName nvarchar(100)
declare @sql nvarchar(max)
declare @initSql nvarchar(max)
set @initSql = 'insert into #Ticket (ID, TicketNumber, Complexity, 
NatureOfInquiry, SMEResponseDetail) SELECT ID, TicketNumber, Complexity, 
CASE
    WHEN Complexity = 1 THEN NatureOfInquiry_T1 
    WHEN Complexity In (2,3,4) THEN NatureOfInquiry_T234
    END, SMEResponseDetail FROM T_Ticket WHERE '
declare @whereClause nvarchar(100)
set @whereClause = ' Like' + '''%' + @Keyword + '%'''
DECLARE tblCursor CURSOR FOR SELECT FieldName from @fieldsTable
OPEN tblCursor
FETCH NEXT from tblCursor into @fieldName

WHILE @@FETCH_STATUS = 0  
BEGIN 
set @sql = @initsql + @fieldName + @whereClause
print @sql
EXEC(@sql)

FETCH NEXT from tblCursor into @fieldName
END
Close tblCursor
deallocate tblCursor

select distinct * from #Ticket 
END 

enter image description here

假设要在 fieldNames 为“NatureOfInquiry”和“SMEResponseDetail”的列中搜索关键字“flood”。我可以在下面插入什么来模拟它并返回正确的行?

USE [BCATicketManagementTest]
GO

DECLARE @return_value int

EXEC    @return_value = [dbo].[bcasp_GetTicketsByKeyword]
        @Keyword = N'flood'
        ???
SELECT  'Return Value' = @return_value

GO

最佳答案

怎么样

USE [BCATicketManagementTest]
GO

DECLARE @return_value int

DECLARE @fieldsTableTest [TicketsFields]
INSERT INTO @fieldsTableTest
SELECT 'CUSTOMERID' UNION ALL SELECT 'MANAGERID' UNION ALL SELECT 'SOME OTHER FIELD'


EXEC    @return_value = [dbo].[bcasp_GetTicketsByKeyword]
        @Keyword = N'flood'
        @fieldsTable = @fieldsTableTest
SELECT  'Return Value' = @return_value

GO

我不确定如何使用 SSMS 完成此任务。

有关详细信息,请参阅 Use Table-Valued Parameters (Database Engine)

关于sql-server - 如何在存储过程中将测试数据表作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55763274/

相关文章:

sql - 如何使用 SQL 将图像从 SQL Server 保存到文件

Django - 如何在测试期间更改 FileField upload_to 路径

java - 如何使用 Java 代码刷新文件夹?

templates - Teamcity - 从模板中强制配置配置参数

c# - 更新一个集合到数据库

sql-server - 同一个表的两个不同的更新触发器

testing - TestComplete 和 Adob​​e Air

c++ - C++ 函数中的复杂参数 - 指针、引用或...?

parameters - 使用 SELECT-OPTIONS 作为类方法的导出参数?

sql-server - 从 XML 列中选择属性值时需要/text() 吗?