Имя таблицы - Scores
.
Правильно ли делать следующее?
IF EXISTS(SELECT *
FROM dbo.Scores)
DROP TABLE dbo.Scores
Имя таблицы - Scores
.
Правильно ли делать следующее?
IF EXISTS(SELECT *
FROM dbo.Scores)
DROP TABLE dbo.Scores
Правильно ли делать следующее?
IF EXISTS(SELECT * FROM dbo.Scores) DROP TABLE dbo.Scores
Нет. Это приведет к удалению таблицы, только если она содержит какие-либо строки (и вызовет ошибку, если таблица не существует).
Вместо этого для постоянного стола вы можете использовать
IF OBJECT_ID('dbo.Scores', 'U') IS NOT NULL
DROP TABLE dbo.Scores;
Или для временной таблицы вы можете использовать
IF OBJECT_ID('tempdb.dbo.#T', 'U') IS NOT NULL
DROP TABLE #T;
SQL Server 2016+ имеет лучший способ, используя DROP TABLE IF EXISTS …
. Смотрите ответ @Jovan.
Из SQL Server 2016 вы можете использовать
DROP TABLE IF EXISTS dbo.Scores
Ссылка: DROP IF EXISTS - новое в SQL Server 2016
Он скоро появится в базе данных SQL Azure.
ANSI SQL/межплатформенный способ заключается в использовании INFORMATION_SCHEMA, который был специально разработан для запроса метаданных об объектах в базе данных SQL.
if exists (select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = 'Scores' AND TABLE_SCHEMA = 'dbo')
drop table dbo.Scores;
Большинство современных серверов РСУБД предоставляют, по крайней мере, базовую поддержку INFORMATION_SCHEMA, в том числе: MySQL, Postgres, Oracle, IBM DB2 и Microsoft SQL Сервер 7.0 (и больше).
Видели так много, что на самом деле не работают. когда создается временная таблица, ее необходимо удалить из tempdb!
Единственный действующий код:
IF OBJECT_ID('tempdb..#tempdbname') IS NOT NULL --Remove dbo here
DROP TABLE #tempdbname -- Remoeve "tempdb.dbo"
Или:
if exists (select * from sys.objects where name = 'Scores' and type = 'u')
drop table Scores
Надеюсь, это поможет:
begin try drop table #tempTable end try
begin catch end catch
В SQL Server 2016 (13.x) и выше
DROP TABLE IF EXISTS dbo.Scores
В более ранних версиях
IF OBJECT_ID('dbo.Scores', 'U') IS NOT NULL
DROP TABLE dbo.Scores;
U ваш table type
Я написал немного UDF, который возвращает 1, если его аргумент является именем существующей таблицы, 0 в противном случае:
CREATE FUNCTION [dbo].[Table_exists]
(
@TableName VARCHAR(200)
)
RETURNS BIT
AS
BEGIN
If Exists(select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = @TableName)
RETURN 1;
RETURN 0;
END
GO
Чтобы удалить таблицу User
, если она существует, вызовите ее так:
IF [dbo].[Table_exists]('User') = 1 Drop table [User]
Простым является то, что:
IF OBJECT_ID(dbo.TableName, 'U') IS NOT NULL
DROP TABLE dbo.TableName
где dbo.TableName
- ваша желаемая таблица, а "U" - type
вашего table
.
IF EXISTS (SELECT NAME FROM SYS.OBJECTS WHERE object_id = OBJECT_ID(N'Scores') AND TYPE in (N'U'))
DROP TABLE Scores
GO
Я использую:
if exists (select *
from sys.tables
where name = 'tableName'
and schema_id = schema_id('dbo'))
begin
drop table dbo.tableName
end
Вы также можете сделать это
DROP TABLE IF EXISTS dbo.Product
Отбрасывается триггер
DROP TRIGGER IF EXISTS trProductInser
Используйте эту команду, я использовал это.
IF OBJECT_ID('mytablename') IS NOT NULL
BEGIN
DROP TABLE mytablename
END
Лучший визуальный и простой способ, если вы используете Visual Studio, просто откройте в строке меню,
Вид → Обозреватель объектов SQL Server
он должен открыться как показано здесь
Выберите и щелкните правой кнопкой мыши таблицу, которую хотите удалить, затем удалите. Такой экран должен отображаться. Нажмите Обновить базу данных, чтобы подтвердить.
Этот метод очень безопасен, так как дает обратную связь и предупреждает о любых отношениях удаленной таблицы с другими таблицами.
Сделайте это, это самый простой способ.
qry
будет вашим собственным запросом, независимо от того, что вы хотите в списке выбора.
set @qry = ' select * into TempData from (' + @qry + ')Tmp '
exec (@qry)
select * from TempData
drop table TempData