我可以在 CREATE 查询中使用参数吗?

Can I use parameters in a CREATE query?

实际上我有 2 个问题,都在 SQL 服务器中。

  1. 有一个类似于 "Create Table" 的查询,但用于创建列?如果存在,请问是怎样的?

  2. 我需要使用 "Create Table" 但使用参数,但我不知道这是否可能。 例如:

    @table_name string,
    @column_name1 int,
    @column_name2 int,
    @column_name3 int
    
    CREATE TABLE @table_name
        (
        @column_name1,
        @column_name2,
        @column_name3
        ....
        );
    

显然这只是我的想法,但行不通。有正确的做法吗?

感谢您的帮助!

  1. 创建一个列可能是指向现有 table 添加一个列,对吗?

    为此使用 ALTER TABLE

    ALTER TABLE TableName ADD newColumn 数据类型

更多信息https://msdn.microsoft.com/en-us/library/ms190273.aspx

  1. 要动态创建 table,请尝试使用 sp_executesql 函数

      sp_executesql 'CREATE TABLE @table_name @column_name1 datatype1, 
         @column_name2 datatype2, 
         @column_name3 datatype3 
      )', 
      N'@table_name varchar(100),  
        @column_name1 varchar(100), 
        @column_name2 varchar(100),  
        @column_name3 varchar(100)', 
        @table_name, 
        @column_name1, 
        @column_name2, 
        @column_name3 
    

这里有更多信息https://msdn.microsoft.com/en-us/library/ms188001.aspx

对于 #1,使用 ALTER TABLE 命令。

对于 #2,您是如何执行查询的?您可以先使用完整命令和 table 名称作为参数创建一个字符串变量,然后执行查询。类似于:

declare @ CustomerID int 

set @ CustomerID = 3262833

declare @sql nvarchar(1000)



set @sql = N'SELECT * FROM [dbo].[Customers] AS [tbCustomers] WITH (NOLOCK) 

WHERE  tbCustomers.ID = '+ + cast(@CustomerID as nvarchar(10))   



exec (@sql)
CREATE PROCEDURE create_table 
    @table varchar(10),
    @ID varchar(10),
    @Name varchar(20)

AS
BEGIN
    Declare @sql nvarchar(MAX)
    SET NOCOUNT ON
    Set @sql = 'CREATE TABLE '+@table+'('+@ID+' bigint NOT NULL,'+@Name+' varchar(25)) ON [PRIMARY]';
    exec (@sql)
END
GO