1

私のテーブルidの列のデータ型はint.

そして、選択するアイテムのIDのリストがあります。

だから、ここに私のコードの一部があります:

DECLARE @user_list
SELECT @user_list=(
SELECT user_list
FROM sometable
WHERE rowNum=xxx
);
SELECT *
FROM anotherTable
WHERE user_id IN(@user_list)

しかし、それは機能しません。エラーメッセージは次のようになります。

varchar を int に変換できません

ありがとう!

4

4 に答える 4

7

Split 関数を作成して、必要なときに使用できます。

CREATE FUNCTION [dbo].[Split]
(   
    @List nvarchar(max),
    @SplitOn nvarchar(1)
)
RETURNS @RtnValue table (
    Id int identity(1,1),
    Value nvarchar(max)
)
AS
BEGIN
    While (Charindex(@SplitOn,@List)>0)
    Begin 
        Insert Into @RtnValue (value)
        Select 
            Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1))) 
        Set @List = Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List))
    End 

    Insert Into @RtnValue (Value)
    Select Value = ltrim(rtrim(@List))

    Return
END

その後、以下のようにクエリで関数を呼び出すことができます。

SELECT * FROM anotherTable WHERE user_id IN(dbo.split(@user_list,','))

それ以外の場合は、動的クエリを使用する必要があります。

于 2012-08-20T08:14:01.967 に答える
0

テーブル変数を作成@user_listすると、他のテーブルと同じように結合またはフィルタリングできます

 declare @user_list table (id int)
 insert @user_list(id)
 SELECT user_list 
 FROM sometable 
 WHERE rowNum=xxx 


 SELECT * 
 FROM anotherTable 
 WHERE user_id IN(select Id from @user_list) 
于 2012-08-20T08:07:46.117 に答える
0

テーブル変数を使用するだけで、通常の単語を変数に追加できます。

DECLARE @user_list AS TABLE (user_id int NOT NULL);

INSERT @user_list
SELECT user_list
FROM sometable
WHERE rowNum=xxx;

SELECT *
FROM anotherTable
WHERE user_id IN (SELECT user_id FROM @user_list)
于 2012-08-20T08:08:47.223 に答える
0

動的SQLを使用できます

exec('
SELECT *
FROM anotherTable
WHERE user_id IN('+@user_list+')')
于 2012-08-20T08:05:47.707 に答える