powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Динамический sql + передача в переменную результата
5 сообщений из 5, страница 1 из 1
Динамический sql + передача в переменную результата
    #39734143
zhurs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Стоит задача поиска значения типа binary в таблицах в 2 этапа и передать результат в переменную @SubCount:
-формирую набор таблиц во временную таблицу #ReferenceList;
-прохожусь итератором по каждой таблице и ищу нужный текст.

Возникает ошибка
Must declare the table variable "@CurrentTable".
Msg 1087, Level 16, State 1, Line 2

При этом если не передавать в переменную, то всё получается.
Подскажите, пожалуйста, что я не так делаю? Жирным выделил место, где, на мой взгляд, есть проблема:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
USE process1C;

IF object_id(N'tempdb..#ReferenceList',N'U') IS NOT NULL DROP TABLE #ReferenceList
CREATE TABLE #ReferenceList
	(ReferenceTbName VARCHAR(30));

INSERT INTO #ReferenceList
SELECT TABLE_NAME FROM empty_base.INFORMATION_SCHEMA.TABLES
	WHERE TABLE_NAME LIKE '_Reference[0-9]%' AND TABLE_NAME NOT LIKE '%[0-9]_VT[0-9]%'


USE empty_base;

DECLARE
	@SearchTextBinary binary(16),
	@SearchText VARCHAR(max),
	@SQLString nvarchar(400),
	@CurrentTable nvarchar(100),
	@SubCount nvarchar(max);

SET @SearchTextBinary = 0xBD55BC855654353211E8D912F34E1AED
SET @SearchText = CONVERT(varchar(max), @SearchTextBinary, 1)

DECLARE CursorSearch CURSOR FAST_FORWARD
		FOR SELECT ReferenceTbName FROM #ReferenceList;
OPEN CursorSearch

FETCH NEXT FROM CursorSearch
	INTO @CurrentTable
	WHILE @@FETCH_STATUS=0

BEGIN

SET @SQLString = 
'IF EXISTS
	(SELECT * FROM @CurrentTable WHERE _IDRRef = @SearchText )
BEGIN
	SELECT TOP (1)  @SubCount = _Description FROM @CurrentTable WHERE _IDRRef = @SearchText 

END'

	IF	COL_LENGTH(@CurrentTable,'_Description') > 0
		EXECUTE sp_executesql @SQLString, N'@CurrentTable nvarchar (100), @SearchText VARCHAR(max), @SubCount nvarchar(max) OUTPUT', @CurrentTable, @SearchText, @SubCount OUTPUT;

		FETCH NEXT FROM CursorSearch INTO @CurrentTable
END

CLOSE CursorSearch;
DEALLOCATE CursorSearch;

Print @SubCount;
...
Рейтинг: 0 / 0
Динамический sql + передача в переменную результата
    #39734148
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
'IF EXISTS
	(SELECT * FROM ' + quotename(@CurrentTable) + ' WHERE _IDRRef = @SearchText )
BEGIN
	SELECT TOP (1)  @SubCount = _Description FROM ' + quotename(@CurrentTable) + ' WHERE _IDRRef = @SearchText 

END'
...
Рейтинг: 0 / 0
Динамический sql + передача в переменную результата
    #39734220
zhurs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей Алексеевич
Код: sql
1.
2.
3.
4.
5.
6.
'IF EXISTS
	(SELECT * FROM ' + quotename(@CurrentTable) + ' WHERE _IDRRef = @SearchText )
BEGIN
	SELECT TOP (1)  @SubCount = _Description FROM ' + quotename(@CurrentTable) + ' WHERE _IDRRef = @SearchText 

END'



Спасибо за подсказку, Сергей.
Этот вариант я тоже пробовал.
Такой вариант не выдаёт ошибку, но и не заносит результат sp_executesql в переменую @SubCount.
Может, что-то в sp_executesql не так?
...
Рейтинг: 0 / 0
Динамический sql + передача в переменную результата
    #39734241
zhurs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо ещё раз.
Проблему решил.
Оказалось, что нужно переписать @SearchText в стркоке запросат таким образом (возможно, какие-то особенности, связанные с типом binary и его преобразованием в обычную строку):

SET @SQLString =
'IF EXISTS
(SELECT * FROM ' + quotename(@CurrentTable) + ' WHERE _IDRRef = ' + @SearchText + ' )
BEGIN
SELECT TOP (1) @SubCount = _Description FROM ' + quotename(@CurrentTable) + ' WHERE _IDRRef = ' + @SearchText + '

END'
...
Рейтинг: 0 / 0
Динамический sql + передача в переменную результата
    #39734273
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zhurs,

@SQLString = N' blah blah'
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Динамический sql + передача в переменную результата
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]