我编写了这个过程,将2个字符串变量插入到表中:
ALTER Procedure
[dbo].[IND] (@VAssetID varchar(50), @UAssetID nvarchar(255))
As
BEGIN
Declare @Query1 as varchar(max)
Set @Query1 =
'Insert into IndMatch(V_AssetID,U_AssetID) values('+ @VAssetID +','+@UAssetID+')'
EXECUTE(@Query1)
END
当我使用数字字符串运行程序时,只要我尝试插入字母数字代码就会正常工作,但程序失败。
当程序仅使用数字字符串执行时:
Exec IND @VAssetID = '231243332', @UAssetID = '21343321'
该过程执行正常,并将值插入表中。
当使用字母数字字符串执行该过程时:
Exec IND @VAssetID = '2312I43332', @UAssetID = '21T343R321'
它会生成错误:
'I43332'附近的语法不正确。
请协助
答案 0 :(得分:3)
为什么要以字符串形式执行?这个工作得很好:
ALTER Procedure [dbo].[IND] (@VAssetID varchar(50), @UAssetID nvarchar(255))
As
BEGIN
Insert into IndMatch(V_AssetID,U_AssetID) values(@VAssetID, @UAssetID)
END
答案 1 :(得分:1)
你错过了值周围的[']。
它会尝试像这样执行插入:
Insert into IndMatch(V_AssetID,U_AssetID) values(2312I43332,21T343R321 )
但正确的语法应该是
Insert into IndMatch(V_AssetID,U_AssetID) values('2312I43332','21T343R321' )
你需要这样做:
ALTER Procedure
[dbo].[IND] (@VAssetID varchar(50), @UAssetID nvarchar(255))
As
BEGIN
Declare @Query1 as varchar(max)
Set @Query1 =
'Insert into IndMatch(V_AssetID,U_AssetID) values('''+ @VAssetID +''','''+@UAssetID+''')'
EXECUTE(@Query1)
END
运行此,这应该解释它:
DECLARE @Query1 VARCHAR(MAX), @VAssetID VARCHAR(50), @UAssetID NVARCHAR(255);
SET @VAssetID = '231243332';
SET @UAssetID = '21343321';
SET @Query1 = 'Insert into IndMatch(V_AssetID,U_AssetID) values('+@VAssetID+','+@UAssetID+')';
PRINT @Query1;
SET @Query1 = 'Insert into IndMatch(V_AssetID,U_AssetID) values('''+@VAssetID+''','''+@UAssetID+''')';
PRINT @Query1;
打印结果:
更好的是你可以这样做,因为我不认为这里需要动态的SQL:
ALTER Procedure
[dbo].[IND] (@VAssetID varchar(50), @UAssetID nvarchar(255))
As
BEGIN
Insert into IndMatch(V_AssetID,U_AssetID) values( @VAssetID , @UAssetID )
END