我有以下存储过程:另一个转换转换为varchar值 'N' 为int数据类型时失败
CREATE PROCEDURE [cafgAddCoreID]
@HoldingName nvarchar (50) = null
@CountStart int = 0,
AS
DECLARE @sql nvarchar (50)
DECLARE @bit nvarchar (200)
BEGIN
SET @bit = 'MTR1- + CAST ((' + @CountStart + ' + ROW_NUMBER()
OVER (ORDER BY [FindNo])) AS NVARCHAR(10))'
SET @sql = 'INSERT INTO ' + @HoldingName + '([CoreID])
SELECT (' + @bit + ') FROM [DectectoristMetalFinds]'
EXEC @sql
END
但是当我运行:
EXEC [cafgAddCoreID] 'Table1', 9
我得到
当转换varchar值'MTR1- + CAST(('到数据类型int。
运行
INSERT INTO [Table1] ([CoreID])
SELECT ('MTR1-' + CAST ((0 + ROW_NUMBER() OVER (ORDER BY FindNo))
AS NVARCHAR(10))) AS CoreID FROM [Table2]
的作品,所以我知道的方法是正确的,但显然不是在存储过程。
您是否在执行它之前调查过'@ sql'的值? – bendataclear 2013-03-25 17:07:16
您需要确保'MTR1-'被适当数量的撇号包围。此外,heeeeello SQL注入攻击。 – LittleBobbyTables 2013-03-25 17:08:22
问了这么多次......转换nvarchar值'SELECT \ * FROM'时转换失败的可能重复(http://stackoverflow.com/questions/7683353/conversion-failed-when-converting-the-nvarchar- value-select-from) – 2013-03-25 17:12:18