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)