如何创建一个存储过程来创建一个表,其结构存储在另一个表中,当然还有t-sql和sql server?T-SQL如何创建其结构位于另一个表中的表?
回答
T-SQL允许创建使用SELECT * ... INTO
语法的飞行表:
SELECT * INTO TargetTable
FROM SourceTable
-- any false returning condition will do
WHERE 1 = 0
这也可以文笔优美(感谢Deadsheep39
):
SELECT TOP 0 * INTO TargetTable
FROM SourceTable
然而,这将失败TargetTable已经存在,因此您应该检查其是否存在:
IF OBJECT_ID('TheSchema.TargetTable') IS NOT NULL
DROP TABLE TargetTable
另外,不会创建索引,约束或触发器。检查here了解更多详情。
如果你想要去的动态(表名是参数),您可以创建并执行动态查询:
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
检查是否存在可以通过系统函数简化** object_id ** - '如果object_id('dbname.schema.tablename')不为null drop table dbname.schema.tablename'或者如果您只使用默认模式如果object_id('tempdb ..#tablename')不是null drop table tempdb ..#tablename',则表示object_id('tablename')不为null drop table tablename'或tempdb上的示例。 – Deadsheep39
@ Deadsheep39 - 我按照你的建议简化了对象存在检查。谢谢。 – Alexei
您可以使用CREATE TABLE
语句将查询构造为字符串,并使用sp_executesql
存储过程执行它。
例如以这种方式:
DECLARE @query nvarchar(max) = N'CREATE TABLE Table(Col nvarchar(50) NULL)'
EXECUTE sp_executesql @query
凡在@query
变量,你可以建立一个基于你需要什么样的表。
因此,基本上,您可以用比所需的更困难的方式执行create table语句,输入必须手动定义?对于OP来说不是一个好的答案,-1。 – Tobb
据我了解,问题是如何动态创建一个表,它的结构存储在另一个表中。 –
是的,您可以使用SELECT INTO,但在问题中没有指定什么样的新表结构。只有在后面的评论“耶列,将用于填补新表”columbums“ –
- 1. 创建另一个表的结构表无数据
- 2. 如何创建另一个列表中的一个列表?
- 3. postgresql从另一个表中的另一个表创建表
- 4. 如何将一个数据库的一个表设计结构用于另一个数据库表结构
- 5. Mysql:扩展一个表结构与另一个表结构
- 6. 试图创建一个结构列表
- 7. 如何创建一个列表,其中的项目可以拖放到另一个列表中以创建组?
- 8. 在TSQL中,我可以创建一个UDF,其中包含一个表的行?
- 9. 查询多个表中TSQL,其中表名来自另一个表
- 10. 如何创建一个触发器,用于在另一个表中插入数据时创建表中的列
- 11. iPhone:创建一个基于层次结构的表导航
- 12. 如何从架构创建一个表
- 13. DynamoDB:如何创建一个嵌套JSON结构的表?
- 14. 基于另一个列表内容创建列表的列表
- 15. 如何使用TSQL创建一个简单的两表模式?
- 16. 创建一个临时表,其中的行等于一个数
- 17. 用Mysql查询来复制表的结构来创建另一个表
- 18. 如何创建结构数组,其中结构的最后一个元素是一个结构破解
- 19. haskell如何从另一个列表创建一个新列表?
- 20. 如何从另一个列表创建一个嵌套列表?
- 21. 如何创建一个标题栏,其中一些文字位于左侧,另一些位于右侧?
- 22. 其值从另一个表创建MYSQL/Navicat的列表
- 23. 如何创建member_follower表结构?
- 24. 创建另一个结构的含结构领域
- 25. 如何创建一个包含HTML表单,结构化文本
- 26. 如何在另一个表格列中创建表格?
- 27. 如何在另一个表达式中创建表达式?
- 28. 如何锁定表并在mysql中创建另一个表
- 29. 如何用mysql中现有的表结构创建表?
- 30. 如何从现有的另一个相同结构表中花
什么是存储在另一个表?结构像information_schema.columns或者你想重复表结构?要复制结构,使用'select top 0 * into newtable from ...'。 – Deadsheep39
耶列,将要用来填补新表的柱子! – Ayoubleb