如何使用我们输入的名称和字段创建表格?

时间:2014-07-15 07:35:42

标签: sql sql-server-2008

我想创建一个存储过程来创建包含我们在表单中输入的名称和字段的表。

2 个答案:

答案 0 :(得分:0)

下面是SP,它将为您创建动态表。您需要将tablename作为第一个参数传递,第二个参数中的列名称由tilde`分隔,并且由pipe |

分隔的列名和数据类型
--exec DynamicTables 'table1', 'firstname|varchar(1000)~lastname|varchar(1000)~phoneno|int'
Create proc DynamicTables
(
    @tablename varchar(100),
    @fieldsanddatatypes varchar(4000)
)

as

begin

declare @str varchar(4000);
set @str = 'create table ' + @tablename + ' ( ';

select @str = @str + substring(Splvalue, 1,CHARINDEX('|',Splvalue)-1) + ' ' + substring(Splvalue, CHARINDEX('|',Splvalue)+1,len(Splvalue)) + ','
from dbo.FnSplit(@fieldsanddatatypes,'~')

set @str = substring(@str,1,len(@str)-1) + ' )'

exec (@str)

end

在SP中,函数拆分列名称并创建用于创建表的动态脚本。该功能的代码在

之下
CREATE FUNCTION [dbo].[FnSplit](@text varchar(max), @delimiter Nvarchar(20))  
RETURNS @Strings TABLE  
(       
 Splvalue Nvarchar(4000)     
)  
AS  
BEGIN  
DECLARE @index int   
SET @index = -1   
WHILE (LEN(@text) > 0)   
BEGIN    
SET @index = CHARINDEX(@delimiter , @text)    
IF (@index = 0) AND (LEN(@text) > 0)    
  BEGIN     
    INSERT INTO @Strings VALUES (@text)  
      BREAK    
  END    
IF (@index >= 1)    
  BEGIN     
if (@index - 1) = 0  
 INSERT INTO @Strings VALUES (Null)  
else     
 INSERT INTO @Strings VALUES (LEFT(@text, @index - 1))     
SET @text = RIGHT(@text, (LEN(@text) - @index))    
  END    
ELSE   
  SET @text = RIGHT(@text, (LEN(@text) - @index))   
END  
RETURN  
END 

答案 1 :(得分:0)

ALTER PROCEDURE sproc_BuildTable 
(
   @TableName NVARCHAR(128),
   @Column1Name NVARCHAR(32)
)

AS

DECLARE @Query NVARCHAR(MAX) 
BEGIN

SET @Query='CREATE TABLE '  + @TableName + '(' +@Column1Name + ' VARCHAR(200)'+ ')'
EXECUTE (@Query)

END