日期:2014-05-18  浏览次数:20754 次

SQL动态语句问题,急~~~~~
数据库为SQLServer2005
数据表结构:
CategoryId     int   自动增长   分类ID
CategoryName   nvarchar(20)   分类名
CategoryIntro   nvarchar(200)   分类简介
ParentId   int   父类ID

下面是存储过程,实现在某个表(动态,各表结构一样)添加分类

set   ANSI_NULLS   ON
set   QUOTED_IDENTIFIER   ON
go


ALTER   PROCEDURE   [dbo].[EG_Category_Add]  
(
@CategoryName   nvarchar(20),
@CategoryIntro   nvarchar(200),
@ParentId   int,
@TableName   nvarchar(100)
)

AS

declare   @sql   varchar(1000)
set   @sql= 'Insert   Into   [ '   +   @TableName   +   ']   ([CategoryName],[CategoryIntro],[ParentId])   Values( '+str(@CategoryName)+ ', '+str(@CategoryIntro)+ ', '+str(@ParentId)+ ') '
exec(@sql)  

出现的问题:在参数分类名和简介为数字时能够正常插入,当为字符或中文时出错!

DECLARE   @RC   int
DECLARE   @CategoryName   nvarchar(20)
DECLARE   @CategoryIntro   nvarchar(200)
DECLARE   @ParentId   int
DECLARE   @TableName   nvarchar(100)

--   TODO:   在此处设置参数值。

EXECUTE   @RC   =   [XR_Data].[dbo].[XR_Category_Add]  
      '23233 '
    , '2323323 '
    ,0
    , 'EG_ArticleCategory '
这样能够正常添加分类;

DECLARE   @RC   int
DECLARE   @CategoryName   nvarchar(20)
DECLARE   @CategoryIntro   nvarchar(200)
DECLARE   @ParentId   int
DECLARE   @TableName   nvarchar(100)

--   TODO:   在此处设置参数值。

EXECUTE   @RC   =   [XR_Data].[dbo].[XR_Category_Add]  
      '本站动态 '
    , '本站动态 '
    ,0
    , 'EG_ArticleCategory '

这样就提示:消息8114,级别16,状态5,过程EG_Category_Add,第14   行
从数据类型nvarchar   转换为float   时出错。

请各路高手给出正确的存储过程写法,谢谢!
第一个解决问题的一次性送50分!!

------解决方案--------------------
ALTER PROCEDURE [dbo].[EG_Category_Add]
(
@CategoryName nvarchar(20),
@CategoryIntro nvarchar(200),
@ParentId int,
@TableName nvarchar(100)
)

AS

declare @sql varchar(1000)
set @sql= 'Insert Into [ ' + @TableName + '] ([CategoryName],[CategoryIntro],[ParentId]) Values( ' ' '+@CategoryName+ ' ' ', ' ' '+@CategoryIntro+ ' ' ', '+cast(@ParentId as varchar)+ ') '
print @sql --加上些行,你可以查看拼接后的语句,也会发现你错误的原因
exec(@sql)