Как передать таблицу тестовых данных в качестве параметра в хранимую процедуру - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть хранимая процедура, которую я хочу проверить.Он использует уже созданный 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

Предположим, что в сценарии требуется поиск keyword «флуд» в столбцах с fieldNames «NatureOfInquiry» и «SMEResponseDetail».Что я мог бы подключить к ниже, чтобы смоделировать это и получить правильные строки для возврата?

USE [BCATicketManagementTest]
GO

DECLARE @return_value int

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

GO

1 Ответ

1 голос
/ 19 апреля 2019

Как насчет

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.

Для получения дополнительной информации см. Использование табличных параметров (компонент Database Engine)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...