Edw*_*vin 3 sql t-sql sql-server
我该如何使用t-sql和SQL Server创建一个存储过程来创建一个表,该表的结构存储在另一个表中?
T-SQL允许使用以下SELECT * ... INTO语法动态创建表:
SELECT * INTO TargetTable
FROM SourceTable
-- any false returning condition will do
WHERE 1 = 0
Run Code Online (Sandbox Code Playgroud)
这也可以写得很优雅(感谢Deadsheep39):
SELECT TOP 0 * INTO TargetTable
FROM SourceTable
Run Code Online (Sandbox Code Playgroud)
但是,如果TargetTable已经存在,这将失败,因此您应该检查其是否存在:
IF OBJECT_ID('TheSchema.TargetTable') IS NOT NULL
DROP TABLE TargetTable
Run Code Online (Sandbox Code Playgroud)
另外,将不会创建索引,约束或触发器。请点击这里了解更多详情。
如果要动态化(表名是参数),可以创建并执行动态查询:
CREATE PROCEDURE dbo.GenerateTable
(
@SourceTable VARCHAR(128),
@TargetTable VARCHAR(128)
)
AS
BEGIN
DECLARE @SQL NVARCHAR(4000) = N'
SELECT * INTO ' + QUOTENAME(@TargetTable) + '
FROM ' + QUOTENAME(@SourceTable) + '
-- any false returning condition will do
WHERE 1 = 0'
EXEC (@SQL)
END
GO
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
107 次 |
| 最近记录: |