插入带有2个字符串参数的过程

时间:2016-03-04 19:10:39

标签: sql stored-procedures parameters sql-server-2012

我编写了这个过程,将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'附近的语法不正确。

请协助

2 个答案:

答案 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;

打印结果:

enter image description here

更好的是你可以这样做,因为我不认为这里需要动态的SQL:

ALTER Procedure 
[dbo].[IND] (@VAssetID varchar(50), @UAssetID nvarchar(255))
As
BEGIN


   Insert into IndMatch(V_AssetID,U_AssetID) values(  @VAssetID  , @UAssetID ) 

END