2015-05-12 3 views
1

У меня есть хранимая процедура, которую я использую для выполнения запроса для получения информации о балансах клиента с течением времени. Она имеет следующий синтаксис:SQL Параметр Длина VBA

exec Client_Balance_SP @ClientList, @recentDate, @dateList 

где @ClientList является разделенный запятыми список имен клиентов, то есть «Мэри Сью, Джон Доу, Джимми Джона, @recentDate является дата, как«2015-05-11 00:00:00 ', а @dateList - это список таких дат, как «2015-05-04 00:00:00, 2015-04-27 00:00:00, ...»

Вопрос I am есть, когда длина @dateList превышает 100 символов; Я получаю ошибку времени выполнения в Excel. Есть ли способ обойти эту проблему, которая позволила бы мне запустить только один запрос?

Спасибо!

Jay

+1

Вы используете ADODB.Command для выполнения процедуры ? Является ли длина параметра ** @ dateList ** более 100 символов? –

+0

Как обходной способ, как насчет удаления времени (00:00:00) из дат @dateList? Это позволит сэкономить 9 символов в день - почти половину. –

+0

Jon - Я использую ADODB.Connection.Execute для выполнения процедуры. И да, параметр @dateList имеет более 100 символов. – Jay

ответ

1

Я хотел бы попробовать либо разделить запрос таким образом, чтобы длина @dateList s всегда меньше 100.

И я думаю, что более элегантное решение заключается в использовании таблицы для @datelist , Например

exec Client_Balance_SP @ClientList, @recentDate, (Select dt from #tbl_date_list) 

И чем ваш Vba макрос может предварительно загрузить #tbl_date_list из CSV или отличиться перед хранимой процедуры (и удалить его в конце концов, если вы хотите).

И вы всегда будете иметь максимум 2 запросов независимо от количества элементов в @dateList

См temp tables и bulk insert читать CSV в них

+0

Спасибо за ответ! К сожалению, @dateList не приходит из другой таблицы, а исходя из другого модуля, я писал в VBA независимо от базы данных, к которой я обращаюсь, и у меня нет доступа на запись к базе данных (хранимая процедура была сгенерирована другой командой). Любые другие предложения? – Jay

+0

Я обновил свой ответ на используйте временные таблицы, если у вас есть разрешение на подключение к базе данных, у вас должна быть привилегия создавать и удалять временные таблицы (в соответствии с этой ссылкой: https://social.msdn.microsoft.com/Forums/sqlserver/en-US/ c903a88b-1a5b-4ba7-ab3d-81156e0dec72/разрешение-о-создание-ТЕМП-таблицы-в-MSSQL-2005? форум = transactsql) –

Смежные вопросы