Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 存储过程强制转换错误_Sql Server 2008_Stored Procedures - Fatal编程技术网

Sql server 2008 存储过程强制转换错误

Sql server 2008 存储过程强制转换错误,sql-server-2008,stored-procedures,Sql Server 2008,Stored Procedures,我对以下SP有一个奇怪的问题: 创建过程[dbo]。[Manufacturer\u GetProductsCountByManufacturedId] @制造商NVARCHARMAX=, @排除类型INT 像 开始 声明@ManufacturerId NVARCHARMAX 声明@GoodManufacturerIds NVARCHARMAX= 声明@result BIGINT 声明@pos INT 声明@lenint 设置@GoodManufacturerIds= 设置@pos=0 设置为@l

我对以下SP有一个奇怪的问题:

创建过程[dbo]。[Manufacturer\u GetProductsCountByManufacturedId] @制造商NVARCHARMAX=, @排除类型INT 像 开始 声明@ManufacturerId NVARCHARMAX 声明@GoodManufacturerIds NVARCHARMAX= 声明@result BIGINT 声明@pos INT 声明@lenint 设置@GoodManufacturerIds= 设置@pos=0 设置为@len=0 而CHARINDEX',',@ManufacturerIds,@pos+1>0 开始 -分裂 设置@len=CHARINDEX',',@ManufacturerIds,@pos+1-@pos 设置@ManufacturerId=SUBSTRING@ManufacturerIds,@pos,@len -检查 选择TOP 1@result=p.ProductId 来自[MYDB].[dbo].[Product]p tpfv.ProductId=p.ProductId上的内部联接[MYDB].[ProductTyping].[TypedProductFieldValue]tpfv 其中ManufacturerId=@ManufacturerId 和tpfv.ProductTypeId@ExcludeType 如果@result>0 设置@GoodManufacturerIds=@GoodManufacturerIds+@ManufacturerId+,' 设置@pos=CHARINDEX',',@ManufacturerIds,@pos+@len+1 终止 -最后一个逗号卡普特 设置@GoodManufacturerIds=LEFT@GoodManufacturerIds, LEN@GoodManufacturerIds - 1 返回@GoodManufacturerIds 终止 基本上,我必须用逗号分隔的值分割一个字符串,对于每个值,我执行一个查询并将结果放入另一个逗号分隔的字符串中。 如果我将这些值作为存储过程参数5220300815612678和5220300815612678发送,则会出现错误,无法将nvarchar值“5220300815612678”强制转换为int类型。 但是,如果我在存储过程中内置这些值:

声明@ManufacturerId NVARCHARMAX 声明@GoodManufacturerIds NVARCHARMAX= 声明@result BIGINT 声明@pos INT 声明@lenint -试验 声明@ManufacturerIds NVARCHARMAX= 声明@ExcludeType INT 集合@ManufacturerIds='5220300815612678137155047,' 设置@ExcludeType=5 设置@GoodManufacturerIds= 设置@pos=0 设置为@len=0 而CHARINDEX',',@ManufacturerIds,@pos+1>0 开始 -分裂 设置@len=CHARINDEX',',@ManufacturerIds,@pos+1-@pos 设置@ManufacturerId=SUBSTRING@ManufacturerIds,@pos,@len -检查 选择TOP 1@result=p.ProductId 来自[MYDB].[dbo].[Product]p tpfv.ProductId=p.ProductId上的内部联接[MYDB].[ProductTyping].[TypedProductFieldValue]tpfv 其中ManufacturerId=@ManufacturerId 和tpfv.ProductTypeId@ExcludeType 如果@result>0 设置@GoodManufacturerIds=@GoodManufacturerIds+@ManufacturerId+,' 设置@pos=CHARINDEX',',@ManufacturerIds,@pos+@len+1 终止 -最后一个逗号卡普特 设置@GoodManufacturerIds=LEFT@GoodManufacturerIds, LEN@GoodManufacturerIds - 1 返回@GoodManufacturerIds 一切正常,我得到了我的新弦。
我不知道第一个过程中的错误在哪里,有什么提示吗?

我发现了错误,我使用的是RETURN,但RETURN用于整数值,在本例中,我的是字符串,因此使用SELECT可以使一切正常工作。

为什么不使用设计用于保存多个值的数据类型,例如XML或表,不是将所有内容都塞进字符串中吗?嗨,t-clausen.dk,我已经使用正确的语法突出显示更新了帖子,现在您可以看到