Передача переменных в URL-адресе через хранимую процедуру
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER Procedure [dbo].[spc_getemail] As Begin -- Declare Variable To Hold The Email Address Retrived DECLARE @Email varchar(255) DECLARE @Name varchar(255) DECLARE @ID int --Declare Cursor to loop through the table data DECLARE EmailCursor Cursor For Select ID,email,name from demoemail -- Open cursor for fetching data in email variable open EmailCursor Fetch Next From EmailCursor into @ID,@Email,@Name while(@@FETCH_STATUS = 0) Begin DECLARE @out_desc varchar(1000), @out_mesg varchar(10) EXEC [dbo].[sp_send_mail] 'a@a.com', 'a@g.com', ' Newsletter Submission', '<a href=''http://someurl.com?id=' + CAST(@ID As varchar(20)) + '''>Please click here to fill your missing details', 'htmlbody', @output_mesg = @out_mesg output, @output_desc = @out_desc output print 'Email id is ' + @Email print 'Email id is ' + @ID End; Close EmailCursor Deallocate EmailCursor End;
Что я уже пробовал:
Я перепробовал все escape-последовательности в sql для разрешения.
PeejayAdams
Это очень трудно сказать, не видя вашего определения IDCursor и Вашего объявления @ID.
Abhi1 Kanobi
декларация приводится ниже.
Начать
-- Объявите Переменную, Чтобы Сохранить Адрес Электронной Почты Восстановленным
Объявить @Email varchar(255)
Объявить @Name varchar(255)
Объявить @ID int
-- Объявить курсор для циклического перебора табличных данных
Объявить курсор EmailCursor для
Выберите email из demoemail
Объявите курсор NameCursor для
Выберите имя из демо-почты
Объявите курсор IDCursor для
Выберите ID из demoemail
-- Открыть курсор для выборки данных в переменной электронной почты
откройте EmailCursor
Fetch Next From EmailCursor into @Email
открыть NameCursor
Fetch Next from NameCUrsor into @Name
открыть IDCursor
Fetch Next from IDCUrsor into @ID
Richard Deeming
Очевидная проблема заключается в том, что вы упускаете +
между различными частями струны:
'<a href=''http://newsletter.qendidate.com?id=' + @ID + '''>Please click here to fill your missing details </a>'
Кроме того, вам не нужны три отдельных курсора; вам просто нужен один курсор, который выбирает три поля.
Abhi1 Kanobi
Он все еще выдает ошибку как " неправильный sysntax near +"
Abhi1 Kanobi
Используйте [orion]
ГО
УСТАНОВИТЕ ANSI_NULLS ON
ГО
УСТАНОВИТЕ QUOTED_IDENTIFIER НА
ГО
Изменить процедуру [dbo].[spc_getemail]
Как
Начать
-- Объявите Переменную, Чтобы Сохранить Адрес Электронной Почты Восстановленным
Объявить @Email varchar(255)
Объявить @Name varchar(255)
Объявить @ID int
-- Объявить курсор для циклического перебора табличных данных
Объявить курсор EmailCursor для
Выберите ID, адрес электронной почты,имя из демо-почты
-- Открыть курсор для выборки данных в переменной электронной почты
откройте EmailCursor
Принести следующий из EmailCursor в @ИД@электронной почты@имя
while (@@FETCH_STATUS = 0)
Начать
Объявить @out_desc varchar(1000),
@out_mesg varchar (10)
EXEC [dbo].[sp_send_mail]
'2@a.com',
'a@a.com',
Представление Бюллетень',
в '<а href="someurl.ком?идентификатор='+удостоверение"в'>Пожалуйста, нажмите здесь, чтобы заполнить недостающие детали ',
'параметр htmlbody',
@output_mesg = выход @out_mesg ,
@output_desc = выход @out_desc
распечатать электронный идентификатор ' + @письмо
распечатать электронный идентификатор ' + @ИД
Конец;
Закрыть EmailCursor
Освободить EmailCursor
Конец;
Richard Deeming
Потому что вы не использовали правильный синтаксис!
Что я выложил:
'<a href=''http://newsletter.qendidate.com?id=' + @ID + '''...
То, что вы использовали:
'<a href=''http://newsletter.qendidate.com?id=' + @ID'''...
Посмотрите внимательно на них обоих и поиграйте в игру "найди разницу".
Abhi1 Kanobi
ладно,
но я использовал его так, как вы указали . пожалуйста, смотрите ниже, ошибка все еще существует
EXEC [dbo].[sp_send_mail]
'a@a.com',
'a@a.com',
"Подчинение",
'< a href="http://someurl.com?id=' + @ID + "' & gt; пожалуйста, нажмите здесь, чтобы заполнить недостающие данные ',
'параметр htmlbody',
@output_mesg = выход @out_mesg ,
@output_desc = выход @out_desc
распечатать электронный идентификатор ' + @письмо
распечатать электронный идентификатор ' + @ИД
Конец;
Richard Deeming
А ошибка есть?
Richard Deeming
Попробуй:
'<a href=''http://someurl.com?id=' + CAST(@ID As varchar(20)) + '''>Please click here to fill your missing details '
Abhi1 Kanobi
ошибка все еще существует, то же самое с"+", а теперь и с @ID
Richard Deeming
А ОШИБКА ЕСТЬ????
Если вам нужна помощь, чтобы исправить ошибку, вы должны сказать нам, что это за ошибка. Мы же не экстрасенсы!
Abhi1 Kanobi
ошибка конкатенации та же, неправильный синтаксис рядом с"+"
неправильный синтаксис рядом с @id, ожидая ' ('или select ..
неправильный синтаксис около 20, ожидая ' ('или select ..
Richard Deeming
Если вы получаете эти сообщения об ошибках, значит, вы не используете код, который я опубликовал.
'<a href=''http://someurl.com?id=' + CAST(@ID As varchar(20)) + '''>Please click here to fill your missing details</a>'
Abhi1 Kanobi
Здравствуйте сэр,
Я использую его именно так как вы указали сэр
Richard Deeming
Ну, это явно не так, потому что если бы Вы были там, то не получили бы тех двух ошибок, которые вы опубликовали.
Не пытайтесь ввести код, так как вы продолжаете делать ошибки. Скопируйте код из моего комментария и вставьте его в свой запрос.
Abhi1 Kanobi
Именно это я и делаю, сэр, копируя код из commnt .
есть ли в любом случае , что я могу показать вам, что я вижу?, эта ошибка сводит меня с ума .:)
Richard Deeming
Сделайте снимок экрана, разместите его на сайте обмена изображениями, например В imgur[^], и разместите ссылку на изображение здесь.
Abhi1 Kanobi
http://imgur.com/6677LfG
Richard Deeming
Подсветка синтаксиса выглядит нормально, так что где-то еще в коде должна быть ошибка.
Abhi1 Kanobi
вы хотите, чтобы я поделился полным кодом?.
Richard Deeming
Да, если вы не видите ошибки, возможно, кто-то другой сможет ее заметить. :)
Abhi1 Kanobi
я думаю, уже загрузил весь код
Richard Deeming
Хорошо, похоже, что вы не можете использовать +
когда вы передаете строку в качестве параметра. Вместо этого вам нужно объявить отдельную переменную:
DECLARE @body varchar(max) = '<a href=''http://someurl.com?id=' + CAST(@ID As varchar(20)) + '''>Please click here to fill your missing details</a>'; EXEC dbo.sp_send_mail 'a@a.com', 'a@g.com', 'Newsletter Submission', @body, 'htmlbody', ...
Вы также пропускаете
Fetch Next From
позвоните в пределах цикла, и вам понадобится CAST
чтобы распечатать идентификатор:print 'Email id is ' + CAST(@ID As varchar(20)) Fetch Next From EmailCursor into @ID,@Email,@Name End;
Bryian Tan
Да. Это должно сработать. почему-то exec SP не любит конкатенацию строк в параметрах.
Abhi1 Kanobi
Привет спасибо за Ваш вклад ,
но, увы, сгенерированная ссылка все равно не перенаправляет на нужную мне страницу .
Его перенаправляют на ... https://aydacfu.xyz/?affiliate_id=12& origin=информационный бюллетень.квендидат.
Richard Deeming
Ну, это совсем другой вопрос. Либо ссылка изменяется по вашему обычаю sp_send_mail
процедура; или она изменяется вашим почтовым сервером; или что-то не так с вашим сайтом.
Abhi1 Kanobi
Привет спасибо за Ваш вклад ,
но, увы, сгенерированная ссылка все равно не перенаправляет на нужную мне страницу .
Его перенаправляют на ... https://aydacfu.xyz/?affiliate_id=12& origin=информационный бюллетень.квендидат.