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

时间:2015-07-01 19:23:39

标签: sql sql-server parameters create-table

实际上我在SQL Server中有两个问题。

  1. 有一个类似“创建表”的查询但是对于创建列?如果它存在,请问它是怎么回事?

  2. 我需要使用“创建表”但使用参数,但我不知道是否可行。 例如:

    @table_name string,
    @column_name1 int,
    @column_name2 int,
    @column_name3 int
    
    CREATE TABLE @table_name
        (
        @column_name1,
        @column_name2,
        @column_name3
        ....
        );
    
  3. 显然,这只是我想到的,不起作用。有正确的方法吗?

    感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

  1. 通过创建列可能意味着将列添加到现有表中,对吗?

    使用 ALTER TABLE

    ALTER TABLE TableName ADD newColumn数据类型

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

    1. 要动态创建表格,请尝试使用 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 
      
    2. 此处有更多信息https://msdn.microsoft.com/en-us/library/ms188001.aspx

答案 1 :(得分:1)

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

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

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)

答案 2 :(得分:1)

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