Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Не могу найти ошибку sp_executesql  [new]
takanaev
Member

Откуда: княжество Московское
Сообщений: 98
USE test;
GO
DECLARE @table_name sysname;
DECLARE table_cursor CURSOR FOR

SELECT  DISTINCT TABLE_NAME 
FROM    INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
	  AND TABLE_NAME LIKE 'p%'
	  AND TABLE_NAME NOT IN ('pSeed','Pzn')
	  OR TABLE_NAME = 'tDocMark';
	  
OPEN table_cursor;
FETCH NEXT FROM table_cursor INTO @table_name;
WHILE @@FETCH_STATUS = 0
BEGIN


  EXECUTE sp_executesql N'TRUNCATE TABLE @table_name'
			         , N'@table_name sysname'
			         , @table_name = @table_name;

	FETCH NEXT FROM table_cursor INTO @table_name;
END
DEALLOCATE table_cursor;

Не могу понять, где ошибка. Народ, подскажите, плс.
Ошибка, видимо, в вызове sp_executesql.

SQL Server 2000.
17 авг 09, 17:54    [7548114]     Ответить | Цитировать Сообщить модератору
 Re: Не могу найти ошибку sp_executesql  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
А с чего Вы взяли, что sp_executesql позволяет использовать имена объектов в качестве параметров?!
17 авг 09, 17:55    [7548125]     Ответить | Цитировать Сообщить модератору
 Re: Не могу найти ошибку sp_executesql  [new]
takanaev
Member

Откуда: княжество Московское
Сообщений: 98
pkarklin
А с чего Вы взяли, что sp_executesql позволяет использовать имена объектов в качестве параметров?!


Не понял. Вы хотите сказать, что сервер будет собирать команду что-то вроде TRUNCATE TABLE 'SomeTable' или как ?
17 авг 09, 17:59    [7548146]     Ответить | Цитировать Сообщить модератору
 Re: Не могу найти ошибку sp_executesql  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
takanaev
Не понял. Вы хотите сказать, что сервер будет собирать команду что-то вроде TRUNCATE TABLE 'SomeTable' или как ?


Я хотел сказать, что sp_executesql не предназначена для построения и выполнения динамических запросов, где динамическими являются имена объектов.

https://www.sql.ru/faq/faq_topic.aspx?fid=104
17 авг 09, 18:02    [7548160]     Ответить | Цитировать Сообщить модератору
 Re: Не могу найти ошибку sp_executesql  [new]
takanaev
Member

Откуда: княжество Московское
Сообщений: 98
pkarklin
takanaev
Не понял. Вы хотите сказать, что сервер будет собирать команду что-то вроде TRUNCATE TABLE 'SomeTable' или как ?


Я хотел сказать, что sp_executesql не предназначена для построения и выполнения динамических запросов, где динамическими являются имена объектов.

https://www.sql.ru/faq/faq_topic.aspx?fid=104


Спасибо. Но всё таки, хотелось бы знать почему — мне важен механизм.
17 авг 09, 18:18    [7548225]     Ответить | Цитировать Сообщить модератору
 Re: Не могу найти ошибку sp_executesql  [new]
Glory
Member

Откуда:
Сообщений: 104760
takanaev


Спасибо. Но всё таки, хотелось бы знать почему — мне важен механизм.

Потому что sp_executesql только выполняет готовые динамические запросы, а не строит их тексты за вас
17 авг 09, 18:24    [7548237]     Ответить | Цитировать Сообщить модератору
 Re: Не могу найти ошибку sp_executesql  [new]
vino
Member

Откуда:
Сообщений: 1191
takanaev
...хотелось бы знать почему — мне важен механизм.
а разве разрешена подобная
DECLARE @table_name sysname;
SET @table_name = N'some_table';
TRUNCATE TABLE @table_name
конструкция?
17 авг 09, 18:40    [7548300]     Ответить | Цитировать Сообщить модератору
 Re: Не могу найти ошибку sp_executesql  [new]
vino
Member

Откуда:
Сообщений: 1191
takanaev, логично как то так
USE test;
GO
DECLARE @table_name sysname;
DECLARE  nvarchar(333);
DECLARE table_cursor CURSOR FOR

SELECT  DISTINCT TABLE_NAME 
FROM    INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
	  AND TABLE_NAME LIKE 'p%'
	  AND TABLE_NAME NOT IN ('pSeed','Pzn')
	  OR TABLE_NAME = 'tDocMark';
	  
OPEN table_cursor;
FETCH NEXT FROM table_cursor INTO @table_name;
WHILE @@FETCH_STATUS = 0
BEGIN

  SET @query = N'TRUNCATE TABLE [' +@table_name + ']'
  EXECUTE sp_executesql @query

	FETCH NEXT FROM table_cursor INTO @table_name;
END
DEALLOCATE table_cursor;
17 авг 09, 18:50    [7548332]     Ответить | Цитировать Сообщить модератору
 Re: Не могу найти ошибку sp_executesql  [new]
takanaev
Member

Откуда: княжество Московское
Сообщений: 98
Видимо, не всегда следует поддаваться разуму в тех вещах, которых не полностью разбираешься.
Ещё раз, спасибо.
17 авг 09, 19:01    [7548365]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить