Ограничение на то, где col в состоянии ( ... )
Я использую следующий код:
SELECT * FROM table
WHERE Col IN (123,123,222,....)
однако, если я положил более ~3000 чисел в IN
предложение, SQL выдает ошибку.
кто-нибудь знает, есть ли ограничение по размеру или что-то подобное?!!
6 ответов:
в зависимости от используемого компонента database engine длина инструкции может быть ограничена.
SQL Server имеет очень большой предел:
http://msdn.microsoft.com/en-us/library/ms143432.aspx
ORACLE имеет очень легкий для достижения предела на другой стороне.
Итак, для больших предложений IN лучше создать временную таблицу, вставить значения и выполнить соединение. Он также работает быстрее.
есть предел, но вы можете разделить ваши значения на отдельные блоки in ()
Select * From table Where Col IN (123,123,222,....) or Col IN (456,878,888,....)
Вы делаете это неправильно.
Параметризуйте свой запрос и передайте идентификаторы с помощью Возвращающий Табличное Значение Параметр.
например, вы можете определить следующий тип
CREATE TYPE IdTable AS TABLE (Id INT NOT NULL PRIMARY KEY)
и иметь следующую хранимую процедуру
CREATE PROCEDURE sp__Procedure_Name @OrderIDs IdTable READONLY, AS SELECT * FROM table WHERE Col IN (SELECT Id FROM @OrderIDs)
в зависимости от вашей версии, используйте возвращающий табличное значение параметр в 2008 году или какой-либо подход, описанный здесь:
почему бы не сделать где в суб-выберите...
предварительный запрос во временную таблицу или что-то...
CREATE TABLE SomeTempTable AS SELECT YourColumn FROM SomeTable WHERE UserPickedMultipleRecordsFromSomeListOrSomething
затем...
SELECT * FROM OtherTable WHERE YourColumn IN ( SELECT YourColumn FROM SomeTempTable )