我正在尝试运行一个创建表的过程,并且表名基于传递给该过程的参数。
这是程序,我已经创建了:
Create PROCEDURE [dbo].[Creating_Table]
@number varchar(8)
AS
CREATE TABLE concat(table_name,@number) (
column1 int,column2 int,column3 int
);
GO
有没有可行的实现方案?
动态SQL 将为您提供帮助。
动态创建表格是一件危险的事情。
Create PROCEDURE [dbo].[Creating_Table]
@number varchar(8)
AS
BEGIN
DECLARE @Query VARCHAR(1000),@TableName VARCHAR(100)
SELECT @TableName = 'Table_'+ @number
SELECT @Query = '
CREATE TABLE '+@TableName+' (
column1 int,column2 int,column3 int
);'
EXEC (@Query)
END
,
或者,您可以使用已重命名的固定“模板表”
CREATE PROCEDURE [dbo].[Creating_Table] @number VARCHAR(8)
AS
BEGIN
SET NOCOUNT ON;
IF @number IS NULL
BEGIN
RETURN;
END
DECLARE @tablename NVARCHAR(128) = 'table_name' + @number;
--table already exists,return
IF OBJECT_ID('dbo.' + @tablename) IS NOT NULL
BEGIN
RETURN;
END
--if template does not exist,create it
IF OBJECT_ID('dbo.template_table') IS NULL
BEGIN
CREATE TABLE dbo.template_table
(
column1 int,column3 int
);
END
--rename template
EXEC sp_rename 'dbo.template_table',@tablename,N'OBJECT';
RETURN;
END