sql - 如何在另一个表中创建名称为哪个名称的表
问题描述
有一个表,其中所有表的名称都位于其中,我需要从中创建一个带有名称的表。
我给存储过程的输入提供了 id 并且通过这个数字我需要从另一个表中提取名称
SELECT FullTableName
FROM dbo.AllTableNames
WHERE Id = 3
结果一些
schema3.Users
我需要创建数据库schema3.Users
。
并且此表必须具有需要添加此架构的字段
[LineId] [bigint] IDENTITY(1,1) NOT NULL,
[HeaderId] [int] NOT NULL,
CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED
(
[LineId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Id' , @level0type=N'SCHEMA',@level0name=N'shema3', @level1type=N'TABLE',@level1name=N'Users', @level2type=N'COLUMN',@level2name=N'LineId'
如何使用我需要从选择中获取的名称创建表?
create proc createdb @dbname sysname
as
declare @sql nvarchar(max)
set @sql = 'create database ' + QUOTENAME(@dbname)
exec (@sql)
解决方案
创建表的最简单方法是构建所需的sql
字符串并执行它。它看起来像以下(未经测试):
declare @sql nvarchar(max)
select @sql='CREATE TABLE ' + QuoteName('schema3') + '.' + QuoteName(FullTableName) + '(
[LineId] [bigint] IDENTITY(1,1) NOT NULL,
[HeaderId] [int] NOT NULL,
CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED ([LineId])
) on [Primary]'
from dbo.AllTableNames
where Id = 3
推荐阅读
- java - 如何在没有 @Query 的情况下使用 Spring Data JDBC 运行自定义 SQL?
- javascript - 按钮 onClick 在反应显示中不起作用 FindDOMNode 在 StrictMode 中已弃用
- postgresql - PostgreSQL 中重叠间隔的最大计数
- python - flask_sqlalchemy 关系问题,
- git - Git-Flow - “独立组件” - 如何?
- rest - 如何将移动应用离线状态与远程数据库同步?
- javascript - date-fns/parse 无效日期
- css - 如何在 Bootstrap 中将导航栏切换按钮和徽标移动到左侧?
- javascript - 如何从保存在 localStorage 中的表中删除一行?
- reactjs - 如何使用 React Context API 跨多个 Routes 拥有状态?