读书人

SQL动态语句有关问题

发布时间: 2012-01-31 21:28:41 作者: rapoo

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)

读书人网 >SQL Server

热点推荐