首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在存储过程中传递两个不同的中文单词

在存储过程中传递两个不同的中文单词
EN

Stack Overflow用户
提问于 2015-10-05 12:19:54
回答 3查看 868关注 0票数 0

在SQL Server中,我有一个表"a“,如下所示

代码语言:javascript
复制
ID     NAME_TYPE     NAME
1        老师         甲
2        医生         乙
3        厨师         丙
4        医生         丁

我已经创建了一个存储过程

代码语言:javascript
复制
CREATE PROCEDURE [dbo].[a_type]
    @NTTYP nvarchar(20)
AS
    SET NOCOUNT ON
BEGIN   
    SELECT * 
    FROM a
    WHERE NAME_TYPE IN (@NTTYP)
END

我将把一个字符串值(老师,医生) to @NTTYP传递到存储过程中,我想要的预期结果是

代码语言:javascript
复制
ID     NAME_TYPE     NAME
1        老师         甲
2        医生         乙
4        医生         丁

但是我面临的问题是传递给存储过程的字符串值不能显示我想要的结果,下面是我的存储过程结果显示

代码语言:javascript
复制
@return_value = [dbo].[a_type]
                       @NCTTYP = N'老师,医生' 

我可以这样做吗?

EN

回答 3

Stack Overflow用户

发布于 2015-10-05 14:14:08

Andreas Wederbrand给了您一个使用预准备语句的提示,但是它的语法不是针对SQL Server的(我假设是MySQL?)。SQL Server中的预准备语句如下所示:

代码语言:javascript
复制
CREATE PROCEDURE [dbo].[a_type]
(
    @NTTYP NVARCHAR(20)
)
AS
BEGIN
    SET NOCOUNT ON;
    BEGIN TRY
        DECLARE @SQL NVARCHAR(4000)
            , @SQLParams NVARCHAR(100);

        SET @SQL = N'
            SELECT ID
                , NAME_TYPE
                , NAME
            FROM a
            WHERE NAME_TYPE = @NTTYP';

        SET @SQLParams = N'@NTTYP NVARCHAR(20)';

        EXECUTE sp_executesql @SQL, @SQLParams, @NTTYP;
    END TRY
    BEGIN CATCH
        SELECT ERROR_NUMBER(), ERROR_MESSAGE();
    END CATCH
END

如果有效,请让我们知道。

票数 1
EN

Stack Overflow用户

发布于 2015-10-05 12:52:40

您需要在过程中创建一个准备好的语句,如下所示

代码语言:javascript
复制
CREATE PROCEDURE [dbo].[a_type]
@NTTYP nvarchar(20)

AS
SET NOCOUNT ON

BEGIN   
  PREPARE mySelect FROM 'SELECT * FROM a WHERE NAME_TYPE IN (?)';

  EXECUTE mySelect USING @NTTYP;

  DEALLOCATE mySelect;
END
票数 0
EN

Stack Overflow用户

发布于 2015-10-06 10:16:30

我从一个解决我的问题的网站上找到了答案,链接是:http://sqlmag.com/t-sql/passing-multivalued-variables-stored-procedure

然后重新创建我的存储过程,如下所示:

代码语言:javascript
复制
CREATE PROCEDURE [dbo].[a_type]
 @NTTYP nvarchar(20)
AS
 SET NOCOUNT ON
BEGIN   
 SELECT * 
 FROM a
 WHERE CHARINDEX(',' + NAME_TYPE + ',', ',' + @NTTYP + ',') > 0
END

现在,我可以传入字符串值或像老师,医生这样的数组,并能够获得我想要的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32941227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档