SQL存储过程 - 在内部使用参数

时间:2011-08-12 19:22:32

标签: sql table-valued-parameters

我有一个存储过程,我将两个参数传递给。一个参数是表值参数,另一个参数是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?我确定在尝试正确格式化时,我遗漏了一些简单的东西。 谢谢,

-Scott

1 个答案:

答案 0 :(得分:1)

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

请参阅this SO question