请问,存储过程执行的一个小异常

请教,存储过程执行的一个小错误
CREATE   proc   read_info
@dgdcctable   varchar(20),
@dgdccid   varchar(20),
@sid   varchar(50)
as
declare   @sql   varchar(100)
set   @sql   =   'select   *   from   '   +   @dgdcctable     +   '   where   '   +   @dgdccid   +   '   =   ( '   +   @sid   +   ') '
EXEC(@sql)
GO
如果这样执行exec   read_info   'dghouseinfo ', 'newcode ', '2006129102250 '就会出错
服务器:   消息   8115,级别   16,状态   8,行   1
将   numeric   转换为数据类型   numeric   时发生算术溢出错误。

这样就可以exec   read_info   'dghouseinfo ', 'newcode ', '274 '
怎么处理?谢谢

------解决方案--------------------
CREATE proc read_info
@dgdcctable varchar(20),
@dgdccid varchar(20),
@sid varchar(50)
as
declare @sql varchar(100)
set @sql = 'select * from ' + @dgdcctable + ' where ' + @dgdccid + ' = ( ' ' ' + @sid + ' ' ') '
EXEC(@sql)
GO

------解决方案--------------------
CREATE proc read_info
@dgdcctable varchar(20),
@dgdccid varchar(20),
@sid varchar(50)
as
declare @sql varchar(8000)
set @sql = 'select * from ' + @dgdcctable + ' where ' + @dgdccid + ' = ( ' + @sid + ') '
EXEC(@sql)
GO



------解决方案--------------------
CREATE PROC READ_INFO
@DGDCCTABLE VARCHAR(20),
@DGDCCID VARCHAR(20),
@SID VARCHAR(20)
AS
SET NOCOUNT ON
DECLARE @SQL VARCHAR(100)
SET @SQL = 'SELECT * FROM ' + @DGDCCTABLE + ' WHERE ' + @DGDCCID + ' = ( ' ' ' + @SID + ' ' ') '
EXEC SP_EXECUTESQL (@SQL)
GO

EXEC READ_INFO 'DGHOUSEINFO ', 'NEWCODE ', '274 '


------解决方案--------------------
在where比较时 '2006129102250 '这个数据不能转换成 newcode列的数据类型~~