欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

SQLServer 动态创建表,无法加索引默认值等,怎么搞??

程序员文章站 2024-02-14 08:12:34
...

执行了这个存储过程之后出现了一堆错误,表创建成功了,但是索引什么的都没加上,这是怎么回事?? USE [ YXComments ] GO DECLARE @return_value int EXEC @return_value = [ dbo ] . [ procAddComment ] @ParentID = 0 , @SourceID = 1 , @NickName = N '

执行了这个存储过程之后出现了一堆错误,表创建成功了,但是索引什么的都没加上,这是怎么回事??

USE [YXComments]
GO

DECLARE    @return_value int

EXEC    @return_value = [dbo].[procAddComment]
        @ParentID = 0,
        @SourceID = 1,
        @NickName = N'afasf',
        @Content = N'sdfasdfsdf',
        @IP = N'127.0.0.1',
        @City = N'南阳',
        @BeFiltered = 0,
        @Enable = 1,
        @Key = N'soft'

SELECT    'Return Value' = @return_value

消息 102,级别 15,状态 1,第 2 行
'GO' 附近有语法错误。
消息 102,级别 15,状态 1,第 2 行
'GO' 附近有语法错误。
消息 102,级别 15,状态 1,第 2 行
'GO' 附近有语法错误。
消息 102,级别 15,状态 1,第 2 行
'GO' 附近有语法错误。
消息 102,级别 15,状态 1,第 2 行
'GO' 附近有语法错误。
消息 102,级别 15,状态 1,第 2 行
'GO' 附近有语法错误。
消息 102,级别 15,状态 1,第 2 行
'GO' 附近有语法错误。

(1 行受影响)
消息 515,级别 16,状态 2,第 1 行
不能将值 NULL 插入列 'Cai',表 'YXComments.dbo.comments_soft1';列不允许有 Null 值。INSERT 失败。
语句已终止。

(1 行受影响)

/****** Script for SelectTopNRows command from SSMS  ******/

ALTER proc [dbo].[procAddComment]
(
@ParentID int,
@SourceID int,
@NickName nvarchar(20),
@Content nvarchar(300),
@IP nvarchar(30),
@City nvarchar(30),
@BeFiltered bit,
@Enable bit,
@Key nvarchar(50)
)
as
begin
    declare @tableName nvarchar(80);
    declare @tableArea int;
    declare @mod int;
    
    declare @Size int;
    set @Size = 100000;
    
    set @mod = @SourceID % @Size;
    if @mod > 0 
        set @tableArea = Cast(@SourceID / @Size as int) + 1;        
    else    
        set @tableArea = Cast(@SourceID / @Size as int);
    
    set @tableName = 'comments_' + @Key +  Cast(@tableArea as nvarchar(10));
    
    if not Exists(select * from [CommentsTables] where [Key]=@Key and [TableName]=@tableName)    
    begin
        declare @CreateSQL nvarchar(MAX);
        set @CreateSQL = 
        'Create table [dbo].['+@tableName+'](
        [ID] [int] IDENTITY(1,1) NOT NULL,
        [ParentID] [int] NOT NULL,
        [SourceID] [int] NOT NULL,
        [NickName] [nvarchar](20) NOT NULL,
        [Content] [nvarchar](300) NOT NULL,
        [Datetime] [datetime] NOT NULL,
        [IP] [nvarchar](30) NOT NULL,
        [City] [nvarchar](30) NOT NULL,
        [BeFiltered] [bit] NOT NULL,
        [Enable] [bit] NOT NULL,
        [Lou] [int] NOT NULL,
        [Ding] [int] NOT NULL,
        [Cai] [int] NOT NULL,
         CONSTRAINT [PK_'+@tableName+'] PRIMARY KEY CLUSTERED 
        (
            [ID] ASC
        )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
        ) ON [PRIMARY]'
        
        EXEC(@CreateSQL);
        
        
        EXEC('ALTER TABLE [dbo].['+@tableName+'] ADD  CONSTRAINT [DF_'+@tableName+'_ParentID]  DEFAULT ((0)) FOR [ParentID]
        GO
        ');
        
        EXEC('ALTER TABLE [dbo].['+@tableName+'] ADD  CONSTRAINT [DF_'+@tableName+'_Datetime]  DEFAULT (getdate()) FOR [Datetime]
        GO
        ');
        
        EXEC('ALTER TABLE [dbo].['+@tableName+'] ADD  CONSTRAINT [DF_'+@tableName+'_BeFiltered]  DEFAULT ((0)) FOR [BeFiltered]
        GO
        ');        

        EXEC('ALTER TABLE [dbo].['+@tableName+'] ADD  CONSTRAINT [DF_'+@tableName+'_Enable]  DEFAULT ((0)) FOR [Enable]
        GO
        ');
    
        EXEC('ALTER TABLE [dbo].['+@tableName+'] ADD  CONSTRAINT [DF_'+@tableName+'_Lou]  DEFAULT ((1)) FOR [Lou]
        GO
        ');
            
        EXEC('ALTER TABLE [dbo].['+@tableName+'] ADD  CONSTRAINT [DF_'+@tableName+'_Ding]  DEFAULT ((0)) FOR [Ding]
        GO
        ');
        
        EXEC('ALTER TABLE [dbo].['+@tableName+'] ADD  CONSTRAINT [DF_'+@tableName+'_Cai]  DEFAULT ((0)) FOR [Cai]
        GO
        ');
        
        Insert Into [CommentsTables]([Key],[TableName]) values(@Key,@tableName);
    end 
    
    
    set @NickName = Replace(@NickName,'''','''''');
    set @Content = Replace(@Content,'''','''''');
    set @IP = Replace(@IP,'''','''''');
    set @City = Replace(@City,'''','''''');
    
    Exec('Insert Into dbo.['+@tableName+'](ParentID,SourceID,NickName,Content,IP,City,BeFiltered,[Enable])
    values ('+@ParentID+','+@SourceID+','''+@NickName+''','''+@Content+''','''+@IP+''','''+@City+''','+@BeFiltered+','+@Enable+');')

end 







GO