【问题标题】:How to insert comma-separated string value in stored procedure [duplicate]如何在存储过程中插入逗号分隔的字符串值[重复]
【发布时间】:2019-01-16 19:21:50
【问题描述】:

这是我添加多个播放器的存储过程:

CREATE PROCEDURE [dbo].[AddMultipleUserofSameCountry]    
    @UserIds NVARCHAR(MAX),       
    @CountryCode INT,    
    @OwnsHasAccess INT,   
    @QryResult INT OUTPUT    
AS    
BEGIN TRY    
    SET @QryResult  = 0;    

    BEGIN TRANSACTION    
    BEGIN  
        INSERT INTO Players (CountryCode, UserId, OwnsHasAccess, InsertedWhen) 
        VALUES (@CountryCode,
                (SELECT Value FROM dbo.SplitString(@UserIds, ',')),
                @OwnsHasAccess, GETDATE());  
    END    

    COMMIT TRANSACTION    

    SET @QryResult  = 1;    
END TRY    
BEGIN CATCH    
    ROLLBACK TRANSACTION    
    SET @QryResult  = 0;    
END CATCH    

UserIds 是逗号分隔的字符串值

DAL 代码

array = string.Join(",", UserIds.Select(n => n.ToString()).ToArray());

SqlParameter sqlParam = cmdProc.Parameters.AddWithValue("@UserIds", array);
sqlParam.SqlDbType = SqlDbType.VarChar;

请建议有什么方法可以通过多个 UserId 来插入多个播放器

【问题讨论】:

  • 您使用了 MySQL 标签,但代码看起来更像是用于 SQL Server。请检查标签并在必要时进行更正。请为您的 DBMS 的特定版本添加标签。
  • 是否有理由不为每个 id 调用该过程?是不是必须一个一个来完成?

标签: sql sql-server sql-server-2008 stored-procedures


【解决方案1】:

您应该构建完整的行以在INSERT 语句中使用:

CREATE PROCEDURE [dbo].[AddMultipleUserofSameCountry]    
 @UserIds nvarchar(MAX),       
 @CountryCode int,    
 @OwnsHasAccess int,   
 @QryResult int output    
AS    
 Begin Try    
  Set @QryResult  = 0;    
  Begin Transaction    
   Begin  
       INSERT INTO Players(CountryCode,UserId,OwnsHasAccess,InsertedWhen)
       SELECT @CountryCode, Value, @OwnsHasAccess, GETDATE()
          FROM dbo.SplitString(@UserIds,',');  
   END    

   Commit Transaction    
   Set @QryResult  = 1;    

 End Try    
 Begin Catch    
  Rollback Transaction    
  Set @QryResult  = 0;    
 End Catch

注意:我假设 dbo.SplitString 与 SQL Server 2016 中的 STRING_SPLIT 工作方式相同

猜你喜欢
  • 2011-12-24
  • 1970-01-01
  • 2011-04-29
  • 2014-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-29
  • 1970-01-01
相关资源
最近更新 更多