我想在SQL Server中创建一个像另一个表的表。
在Postgres中我曾经用这个请求创建它:
CREATE TABLE IF NOT EXISTS table2 (LIKE table1 INCLUDING ALL) INHERITS (table1)
答案 0 :(得分:1)
这样的事情应该有效:
IF OBJECT_ID('table1', 'U') IS NULL BEGIN
SELECT TOP 0 * INTO table1 FROM table2
END
这将在table2
中克隆table1
的列定义而不插入任何数据(因为top 0
)。
然后你必须为table1
创建PK,UK,FK。为此,您可以查看:https://www.mssqltips.com/sqlservertip/3443/script-all-primary-keys-unique-constraints-and-foreign-keys-in-a-sql-server-database-using-tsql/
使用此资源,您可以生成ALTER TABLE
脚本,将所有PK,UK,FK添加到变量中并运行它:
DECLARE @sqlCommand nvarchar(1000)
EXECUTE sp_executesql @sqlCommand
答案 1 :(得分:1)
SELECT *
INTO table2
FROM table1 where 1=2
SELECT *
=选择所有列INTO
=设置地点FROM
=查找的地方,WHERE 1=2
=过滤条件答案 2 :(得分:0)
尝试
public function InsertarPropiedad($CadenaJson) {
$ObjetoJson = json_decode($CadenaJson);
$response = array("Msg"=>"","IdRegistro"=>"0");
try
{
$stmt = $this->db->prepare("INSERT INTO PROPIEDADES (prop_id,titulo,propiedad,categoria,superficie,fecha,actualizacion,edo_sync,_id) VALUES(:PROP_ID,:TITULO,:PROPIEDAD,:CATEGORIA,:SUPERFICIE,:FECHA,:ACTUALIZACION,:EDO_SYNC.:ID)");
$stmt->bindparam(":PROP_ID",$ObjetoJson->prop_id);
$stmt->bindparam(":TITULO",$ObjetoJson->titulo);
$stmt->bindparam(":PROPIEDAD",$ObjetoJson->propiedad);
$stmt->bindparam(":CATEGORIA",$ObjetoJson->categoria);
$stmt->bindparam(":SUPERFICIE",$ObjetoJson->superficie);
$stmt->bindparam(":FECHA",$ObjetoJson->fecha);
$stmt->bindparam(":ACTUALIZACION",$ObjetoJson->actualizacion);
$stmt->bindparam(":EDO_SYNC",$ObjetoJson->edo_sync);
$stmt->bindparam(":ID",$ObjetoJson->_id);
$stmt->execute();
$response["Msg"] = "Propiedad Registrado Correctamente";
$response["IdRegistro"] = $this->db->lastInsertId();
}
catch(PDOException $e)
{
$response["Msg"] = $e->getMessage();
$response["IdRegistro"] = "0";
}
return json_encode($response);
}
并且,如果您希望表格为空,那么
SELECT *
INTO table2
FROM table1
另一种选择是将TRUNCATE table2
编写为create,然后编辑脚本以创建table1
首选脚本选项,因为它还会保留所有索引,键等。您需要确保重命名索引以及表。
答案 3 :(得分:-1)
select top 0 * into x from y
将为您提供一个表空的shell,没有完全定义为原始表的数据减去所有索引,约束等