Почему OPENQUERY не принимает переменные? - PullRequest
2 голосов
/ 11 ноября 2009

Мне хорошо известно, что MS SQL Server не позволяет использовать переменные в операторе OPENQUERY, и я знаю об обходных путях.

Что я хотел бы знать, так это кто-нибудь знает, ПОЧЕМУ переменные или объединенные строки не допускаются?

Обручи, из-за которых люди прыгают, просто поразительны и просто не соответствуют другим функциям, таким как EXEC.

Кто-нибудь может прокомментировать это? Кого я должен подкупить у М.С., чтобы его разобраться?

Ответы [ 2 ]

3 голосов
/ 11 ноября 2009

Ограничение вызвано тем, как связанные серверы реализованы в SQL Server, и тем, как работают зависимые библиотеки. Существует целая цепочка библиотек, используемых для передачи вашей команды SQL, все они имеют разные размеры переменных и размер кэша. Некоторые ограничения существуют в самих драйверах OCBC, поэтому 8k - безопасная ставка от Microsoft. Запрещение передачи переменных просто приводит к соблюдению правила лимита 8 КБ.

1 голос
/ 08 января 2010
declare @v1 varchar(max)

EXEC('SELECT * FROM OPENQUERY (<linkedserver>, ''SELECT * FROM <table> WHERE <column> = ''''' + @v1 + ''''''')')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...