2

ストアド プロシージャ:

ALTER PROCEDURE [dbo].[MyProcedure]
    @CommaSeperatedValues nvarchar(500)
AS
BEGIN
    SET NOCOUNT ON;
    SELECT  Col1, Col2, Col3
    FROM MyTable
    WHERE SomeCol_BigIntDataType IN (@CommaSeperatedValues) 

コードからの値は文字列値です: "9010073,9010074"

次のように SP を実行してみました: exec MyProcedure '9010073,9010074'

これにより、SP の実行中に「データ型 nvarchar から bigint への変換中にエラーが発生しました」というエラーが発生します

次のように、選択クエリを個別に実行すると:

SELECT  Col1, Col2, Col3
    FROM MyTable
    WHERE SomeCol_BigIntDataType IN (9010073,9010074)

それから私は期待される結果を得ています。

でもSPからは走りたい。

4

3 に答える 3

5

どうぞ。動的クエリでこれを行うことができます

DECLARE @mystring NVARCHAR(max)
DECLARE @UserId  NVARCHAR(max)
SET @UserId = '9010073,9010074'
SELECT @mystring = 'SELECT  Col1, Col2, Col3 FROM MyTable where UserId IN('+ @UserId +')'
EXEC sp_executesql @mystring
于 2016-03-15T11:27:02.820 に答える
2

データベースに SplitString として次の表関数を作成します。アイテムを選択したいとき。これを使って:

Select Part from SplitString(@YourValues, ',')

上記の select ステートメントはクエリで使用されます。

SELECT  Col1, Col2, Col3
    FROM MyTable
    WHERE SomeCol_BigIntDataType IN (Select Part from SplitString(@CommaSeperatedValues, ',')) 

以下の関数は、データベースで一度実行されます。

CREATE FUNCTION [dbo].[SplitString]
(
     -- Add the parameters for the function here
     @myString varchar(500),
     @deliminator varchar(10)
)
RETURNS
@ReturnTable TABLE
(
     -- Add the column definitions for the TABLE variable here
     [id] [int] IDENTITY(1,1) NOT NULL,
     [part] [varchar](50) NULL
)
AS
BEGIN
         Declare @iSpaces int
         Declare @part varchar(50)

         --initialize spaces
         Select @iSpaces = charindex(@deliminator,@myString,0)
         While @iSpaces > 0

         Begin
             Select @part = 
substring(@myString,0,charindex(@deliminator,@myString,0))

             Insert Into @ReturnTable(part)
             Select @part

     Select @myString = 
substring(@mystring,charindex(@deliminator,@myString,0)+ 
len(@deliminator),len(@myString) - charindex(' ',@myString,0))


             Select @iSpaces = charindex(@deliminator,@myString,0)
         end

         If len(@myString) > 0
             Insert Into @ReturnTable
             Select @myString

     RETURN
END
于 2015-02-18T08:05:00.523 に答える