我可以在 CREATE 查询中使用参数吗?
Can I use parameters in a CREATE query?
实际上我有 2 个问题,都在 SQL 服务器中。
有一个类似于 "Create Table" 的查询,但用于创建列?如果存在,请问是怎样的?
我需要使用 "Create Table" 但使用参数,但我不知道这是否可能。
例如:
@table_name string,
@column_name1 int,
@column_name2 int,
@column_name3 int
CREATE TABLE @table_name
(
@column_name1,
@column_name2,
@column_name3
....
);
显然这只是我的想法,但行不通。有正确的做法吗?
感谢您的帮助!
创建一个列可能是指向现有 table 添加一个列,对吗?
为此使用 ALTER TABLE
ALTER TABLE TableName ADD newColumn 数据类型
更多信息https://msdn.microsoft.com/en-us/library/ms190273.aspx
要动态创建 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
实际上我有 2 个问题,都在 SQL 服务器中。
有一个类似于 "Create Table" 的查询,但用于创建列?如果存在,请问是怎样的?
我需要使用 "Create Table" 但使用参数,但我不知道这是否可能。 例如:
@table_name string, @column_name1 int, @column_name2 int, @column_name3 int CREATE TABLE @table_name ( @column_name1, @column_name2, @column_name3 .... );
显然这只是我的想法,但行不通。有正确的做法吗?
感谢您的帮助!
创建一个列可能是指向现有 table 添加一个列,对吗?
为此使用 ALTER TABLE
ALTER TABLE TableName ADD newColumn 数据类型
更多信息https://msdn.microsoft.com/en-us/library/ms190273.aspx
要动态创建 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