我有这个代码我从MySQL转换:
IF NOT EXISTS (SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'TheSchema'
AND TABLE_NAME = 'odds_soccer')
CREATE TABLE "odds_soccer" (...)
唯一的问题是......如果我尝试运行两次,它将第二次出错,错误
Msg 2714,Level 16,State 6,Line 1
数据库中已经有一个名为“odds_soccer”的对象。
因为我实际上在SO处找到了我的解决方案,所以我不确定为什么代码不起作用。
我目前正在运行它作为Microsoft SQL Server Management Studio中选择了我的数据库的查询。
答案 0 :(得分:8)
用于创建表格
EncryptCustomerLookup
删除现有表创建新表
IF NOT EXISTS (SELECT 'X'
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'table_name'
AND TABLE_SCHEMA = 'schema')
BEGIN
create..
END
答案 1 :(得分:6)
您的SELECT
查询在'TheSchema'
架构中查找表,而该表是在默认架构中创建的,通常为dbo
,因为CREATE
中未指定架构名称1}}陈述。
请尝试使用此脚本:
IF NOT EXISTS (SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'TheSchema'
AND TABLE_NAME = 'odds_soccer')
CREATE TABLE [TheSchema].odds_soccer (...)
答案 2 :(得分:1)
相当惊讶,因为它应该工作,但它可能取决于SQL-Server版本。
目前我正在使用这样的脚本:
DECLARE @SchemaID int = (SELECT schema_id FROM sys.schemas WHERE name = 'X')
IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'Y' AND schema_id = @SchemaID)
BEGIN
CREATE TABLE...
END
GO
但基本上是一样的。