Запуск параметризованного хранимого процесса из Power Query

1

Я следовал этому уроку ЗДЕСЬ, но всякий раз, когда я пытаюсь обновить книгу, она выдает ошибку:

DataSource.Error: Microsoft SQL: эта функция базы данных не поддерживает опцию запроса 'Query' со значением 'null'.

Это SQL, стоящий за запросом, и ничего не возвращает ноль, а сохраненный процесс настроен на прием 3 входных параметров.

CSR=Excel.CurrentWorkbook(){[Name="param"]}[Content]{0}[#"CSR"],
d1=Excel.CurrentWorkbook(){[Name="param"]}[Content]{0}[#"d1"],
d2=Excel.CurrentWorkbook(){[Name="param"]}[Content]{0}[#"d2"],
Source = Sql.Database("ServerInstanceName", "Credentials", 
[Query="exec [dbo].[StoredProcToRun] '" & Number.ToText(d1)
& "''," & Number.ToText(d2) & "','" & CSR & "'"])

И это настройка моей хранимой процедуры, показывающая, что она принимает 3 параметра:

Alter PROCEDURE dbo.StoredProcToRun 
@d1 varchar(50), @d2 varchar(50), @CSR varchar(500)

AS
BEGIN

Что мне нужно изменить, чтобы этот мощный запрос передавал параметры Excel в мою хранимую процедуру SQL и возвращал данные обратно в книгу Excel?

Я изменил свой SQL-запрос мощности ниже, и теперь я получаю ошибку

Ожидается запятая

[Query="exec [dbo].[StoredProcToRun] 
& Number.ToText(d1) & "','"
& Number.ToText(d2) & "','" 
& CSR & "'"])
user2676140
источник
один или несколько параметров имеют нулевое значение. Не должно быть частью "& CSR", не должно быть как два других параметра "& Number.ToText (CSR)".
Visu-L
@ visu-l - значение CSR - это текстовое значение, а не числовое значение.
user2676140
поскольку вы строите строку "exec ....", преобразование этого числового значения в строку должно быть необходимо для объединения ваших подстрок. На SQL Server вы также получаете сообщение об ошибке, если вы пытаетесь «выбрать» exec [dbo]. [StoredProcToRun] '+ 3 »вместо« выберите »exec [dbo]. [StoredProcToRun]' + CONVERT (varchar, 3)"
Visu-L
@ visu-l - как мне изменить строку запроса мощности для преобразования (varchar, csr)?
user2676140

Ответы:

0

убедитесь, что у вас есть строка при объединении ваших подстрок. Значения, которые являются числовыми (например, CSR), должны быть преобразованы в строку для объединения.

CSR=Excel.CurrentWorkbook(){[Name="param"]}[Content]{0}[#"CSR"],
d1=Excel.CurrentWorkbook(){[Name="param"]}[Content]{0}[#"d1"],
d2=Excel.CurrentWorkbook(){[Name="param"]}[Content]{0}[#"d2"],
Source = Sql.Database("ServerInstanceName", "Credentials", 
    [Query="exec [dbo].[StoredProcToRun] '" &
    Number.ToText(d1)  & "','" & 
    Number.ToText(d2)  & "','" & 
    Number.ToText(CSR) & "'"])

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

Только что попробовал с частью скрипта сгенерировать строку для оператора EXEC. В конце концов попробуйте сгенерировать строку и скопировать ее в Management Studio, чтобы проверить, работает ли она там.

введите описание изображения здесь

VISU-л
источник
Если я добавлю Number.ToText (CSR), я получу ошибку, из-за которой невозможно преобразовать значение «Имя» в число типа.
user2676140
какой тип данных распознает Power Query при загрузке только значения CSR? Это может быть проблемой. Попробуйте в конце концов Text.From (CSR) вместо Number.ToText.
Visu-L
Изменение в text.from (CSR) дает мне ошибку DataSource.Error: Microsoft SQL: Процедура или функция StoredProcToRun ожидает параметр «@CSR», который не был предоставлен. Однако, если вы посмотрите на синтаксис, он предоставляется?!?!?!
user2676140
Попробуйте в таблице параметров определить каждый столбец в таблице как текст перед импортом в Power Query. Как замечено в уроке: «... чтобы упростить жизнь, я изменил ячейку формата столбца« Дата проверки »на« Текст », в противном случае нам потребуется преобразовать ее в Power Query ....»
visu-l
Я уже отформатировал их как текст, но все равно получить сообщение об ошибке параметра не предоставляется.
user2676140