Как выполнить запрос с превышенной длиной - PullRequest
0 голосов
/ 13 июня 2019

Символьная строка, которая начинается с «0111» ИЛИ «0112» ИЛИ «0115» ИЛИ, слишком длинная.Максимальная длина 4000.

declare @stmt1 varchar(max)
set @stmt1='insert into dbo.abcd SELECT [company],[address], 
[address2],[zip],[zip4],[city],[state], 
[telephone_number],LOWER([email]),[name],[fname],[mname],[lname], 
[title_full] FROM DBO.filter WHERE  
[id] in (''7'',''8'',''11'',''15'')  and contains 
(code,'+''''+'"0111" OR "4142"......................OR 
"5999"'+''''+')'
exec (@stmt1) AT [server]

Ответы [ 2 ]

0 голосов
/ 13 июня 2019

Предполагая, что ваш список кодов хранится в таблице, скажем, 'dbo.codes', с полем 'code', содержащим значение, вы можете избежать предиката CONTAINS и использовать INNER JOIN между двумя таблицами, используя LIKE.

DECLARE @stmt1 VARCHAR(MAX)
SET @stmt1 = 'INSERT INTO dbo.abcd
SELECT DISTINCT [F].[company], [F].[address], [F].[address2], [F].[zip], [F].[zip4],
[F].[city], [F].[state], [F].[telephone_number], LOWER([F].[email]),
[F].[name], [F].[fname], [F].[mname], [F].[lname], [F].[title_full]
FROM dbo.filter AS F INNER JOIN dbo.codes AS C ON F.code LIKE ''%'' + C.code + ''%''
WHERE (F.id in (''7'',''8'',''11'',''15''))';
EXEC (@stmt1) AT [server]
0 голосов
/ 13 июня 2019

Попробуйте это:

declare @stmt1 varchar(max)
set @stmt1=CAST('insert into dbo.abcd SELECT [company],[address], 
[address2],[zip],[zip4],[city],[state], 
[telephone_number],LOWER([email]),[name],[fname],[mname],[lname], 
[title_full] FROM DBO.filter WHERE  
[id] in (''7'',''8'',''11'',''15'')  and contains 
(code,' AS VARCHAR(MAX))+''''+'"0111" OR "4142"......................OR 
"5999"'+''''+')'


exec (@stmt1) AT [server]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...