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

SQL语句拼接的难题
declare @qcyed numeric(28, 8)
declare @qcyec numeric(28, 8)
declare @bqbdd numeric(28, 8)
declare @bqbdc numeric(28, 8)
declare @t varchar(10)
set @qcyed=120
set @qcyec=200
set @bqbdd=350
set @bqbdc=500
set @t='Z'

declare @upsql nvarchar(MAX)
SET @upsql=N'UPDATE tb_Rpt_ZCFZ SET Col=dbo.SetYE('+@qcyed+','+@qcyec+','+@bqbdd+','+@bqbdc+','+@t+') WHERE Sort=00'
print @upsql

其实dbo.SetYE函数的前四个参数都是numeric(28, 8)类型的,最后一个@t是varchar(10)类型

最后提示如下:
从数据类型 nvarchar 转换为 numeric 时出错。

求高手指点!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

------解决方案--------------------
SQL code

DECLARE @qcyed NUMERIC(28, 8)
DECLARE @qcyec NUMERIC(28, 8)
DECLARE @bqbdd NUMERIC(28, 8)
DECLARE @bqbdc NUMERIC(28, 8)
DECLARE @t VARCHAR(10)
SET @qcyed = 120
SET @qcyec = 200
SET @bqbdd = 350
SET @bqbdc = 500
SET @t = 'Z'

DECLARE @upsql NVARCHAR(MAX)
SET @upsql = N'UPDATE tb_Rpt_ZCFZ SET Col=dbo.SetYE(' + LTRIM(@qcyed) + ','
    + LTRIM(@qcyec) + ',' + LTRIM(@bqbdd) + ',' + LTRIM(@bqbdc) + ',' + @t
    + ') WHERE Sort=00'
PRINT @upsql

------解决方案--------------------
探讨
我用exec(@upsql)后出现如下错误:

在函数内的 'EXECUTE STRING' 中对带副作用的或依赖于时间的运算符的使用无效。