我有一个要测试的存储过程。它使用一个已经创建的User-Defined Table Type ([TicketFields])
,它的本质只有一个名为的列fieldNames
,用于保存nvarchar
字段名称('请求者名称、请求者组织等...)。然后它创建一个临时表,使用@keyword
user 参数在选定的字段名称中搜索该关键字。我的问题是,当我执行它进行测试时,我不能简单地将 adatatable
作为参数插入。
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
场景假设要keyword
在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 完成此任务。
有关详细信息,请参阅使用表值参数(数据库引擎)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句