sp_executesql中的命名参数

时间:2015-02-11 14:45:19

标签: sql-server tsql dapper sp-executesql

有什么方法可以调用sp_executesql,其参数不依赖于它们在商店中定义的顺序?与exec相同的查询效果很好,如果你有相同的顺序,它也可以很好地工作,但是必须逐个匹配参数,因为有时我会通过助手动态调用调用,如果对象不会以相同的顺序使用相同的字段,但效果不佳。

create procedure ordertest
  @PARAM1 INT,
  @PARAM2 INT
  AS 
BEGIN
SELECT @PARAM1 AS ONE, @PARAM2 AS TWO
END

-- this works
EXEC ordertest @PARAM1 = 1, @PARAM2 = 2
exec sp_executesql N'exec ordertest @PARAM1, @PARAM2', N'@param1 int, @param2 int', @param2 = '2',  @param1 =  '1'
EXEC ordertest @PARAM2 = 2, @PARAM1 = 1

-- this doesn't work
exec sp_executesql N'exec ordertest @PARAM2, @PARAM1', N'@param1 int, @param2 int', @param2 = '2',  @param1 =  '1'

1 个答案:

答案 0 :(得分:7)

当然可以这样做。您只需要在调用时添加哪个参数。

exec sp_executesql N'exec ordertest @PARAM2 = @Param2, @PARAM1 = @Param1', N'@param1 int, @param2 int', @param2 = '2',  @param1 =  '1'