0

我有一个存储过程,我将两个参数传递到其中。一个参数是表值参数,另一个是 nvarchar。这是存储的过程:

    ALTER PROCEDURE [dbo].[_sp_TestProc]    
    @P1 As [dbo].[FileIdTableType] Readonly,
    @P2 As NVARCHAR (MAX)

AS
BEGIN   
    SET NOCOUNT ON;
    SELECT DISTINCT [Field1], [Field2], [Field3]
      FROM [MyTable] WHERE [Field1] IN (@P1)
      AND [Field2] IN (@P2)

END

然后从代码中,我将我的 DataTable 作为@P1 和一串值作为@P2 传递,看起来像"'Value1', 'Value2', 'Value3', 'Value4'"

是@P2 给我带来了问题。表类型工作正常。通常,当在我的存储过程中使用诸如此类的参数时,我会在内部创建一个字符串,使用参数格式化我的字符串,然后调用 sp_executeSql 以运行查询。但是,这在使用表值参数时不起作用。

有谁知道如何像这样使用表值参数和 nvarchar ?我确定我在尝试正确格式化时遗漏了一些简单的东西。谢谢,

-斯科特

4

1 回答 1

1

您需要先将@P2 解析为临时表或表变量。您不能将 IN 运算符与列出多个值的单个字符串一起使用。

请参阅这个 SO 问题

于 2011-08-12T19:27:13.043 回答