如何在测试SQL存储过程时传入用户定义表类型参数?
如何测试接收用户定义表类型参数的存储过程?
你遇到的问题在使用用户定义表类型(UDTT)作为存储过程参数时很常见——没法直接传入数据表,得先声明一个对应类型的变量,填充好需要的数据后再传递给存储过程。
针对你的场景,要在NatureOfInquiry和SMEResponseDetail字段中搜索关键词flood,可以这样补全测试代码:
USE [BCATicketManagementTest] GO -- 1. 声明与用户定义表类型匹配的变量 DECLARE @searchFields [TicketsFields] -- 2. 往变量中插入要搜索的目标字段名 INSERT INTO @searchFields (FieldName) VALUES ('NatureOfInquiry'), ('SMEResponseDetail') DECLARE @return_value int -- 3. 执行存储过程,传入关键词和准备好的表变量 EXEC @return_value = [dbo].[bcasp_GetTicketsByKeyword] @Keyword = N'flood', @fieldsTable = @searchFields SELECT 'Return Value' = @return_value GO
额外提示:
- 必须保证声明的变量类型和你的
[TicketsFields]完全一致,SQL Server才会识别它作为合法参数。 - 插入的字段名要和存储过程中处理的字段完全匹配(包括空格、大小写),否则动态SQL拼接时会出现语法错误或匹配不到数据。
- 你的存储过程存在SQL注入风险:如果
@Keyword包含单引号,直接拼接字符串会导致执行报错。建议改用sp_executesql做参数化查询,把@Keyword作为参数传递,而不是直接拼进SQL语句里。
内容的提问来源于stack exchange,提问作者gwydion93
相关产品推荐
相关产品推荐

