Лучший способ просмотреть значения и передать каждое значение в запрос в процедуре SQL Server - PullRequest
0 голосов
/ 18 октября 2019

У меня есть запрос select, который возвращает список имен таблиц. Я хочу передать каждое имя таблицы в запрос drop table, чтобы я мог удалить таблицу. Я могу использовать временные таблицы. Это лучший способ сделать это? Есть ли другой способ?

Ответы [ 3 ]

0 голосов
/ 19 октября 2019

Немного опасно, убедитесь, что вы указали базу данных с помощью USE ... Или замените select из SYS.tables вашим запросом, чтобы получить имена таблиц.

USE [ENTERDATEBASENAME]
IF OBJECT_ID('tempdb..#TEMP_DROP') IS NOT NULL DROP TABLE #TEMP_DROP;   
SELECT * INTO #TEMP_DROP FROM SYS.tables

WHILE EXISTS(SELECT TOP 1 * FROM #TEMP_DROP)
BEGIN
    DECLARE @TABLEBNAME VARCHAR(MAX),@SQL VARCHAR(MAX)
    SET @TABLEBNAME = (SELECT TOP 1 [NAME] FROM #TEMP_DROP)
    SET @SQL = 'DROP TABLE ' +  @TABLEBNAME
    EXEC(@SQL)
    DELETE FROM #TEMP_DROP where [name] = @TABLEBNAME
END
0 голосов
/ 19 октября 2019

Я бы не использовал цикл для этого. Здесь гораздо больше кода, чтобы использовать курсор, чем какой-то простой динамический SQL, и вам все равно нужно использовать динамический SQL. Но имейте в виду, что удаление нескольких таблиц может быть проблематичным, если у вас есть внешние ключи. Вам нужно либо удалить эти внешние ключи, либо удалить таблицы в определенном порядке.

declare @SQL nvarchar(max) = ''

select @SQL = @SQL + 'drop table ' + quotename(TableName) + ';'
from YourQueryThatGivesYouTableNames

exec sp_executesql @SQL
0 голосов
/ 18 октября 2019

Вы можете написать сценарий SQL, чтобы использовать запрос для открытия курсора и циклически перебирать значения.

Проверьте эти ресурсы:

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/declare-cursor-transact-sql http://www.sqlservertutorial.net/sql-server-stored-procedures/sql-server-cursor/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...