您好我有一个商店程序,我在那里进行选择查询。 我希望通过外部参数来订购。
我发布了一个最小的例子:
CREATE PROCEDURE [dbo].[up_missioni_get_data]
@order VarChar(100)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT * from missioni ORDER BY ...
END
为了做到这一点,我可以写什么?
感谢
答案 0 :(得分:8)
您有2个选项,可以使用CASE语句,也可以使用动态sql
这将是CASE声明的一个例子
DECLARE @Table TABLE(
Col1 VARCHAR(10),
Col2 VARCHAR(10)
)
DECLARE @OrderBy VARCHAR(100)
SET @OrderBy = 'Col1'
SELECT *
FROM @Table
ORDER BY
CASE
WHEN @OrderBy = 'Col1' THEN Col1
WHEN @OrderBy = 'Col2' THEN Col2
ELSE Col1
END
这将是动态sql的例子
CREATE TABLE #Table (
Col1 VARCHAR(10),
Col2 VARCHAR(10)
)
DECLARE @OrderBy VARCHAR(100)
SET @OrderBy = 'Col1'
DECLARE @SqlString NVARCHAR(MAX)
SELECT @SqlString = 'SELECT * FROM #Table ORDER BY ' + @OrderBy
EXEC(@Sqlstring)
DROP TABLE #Table
答案 1 :(得分:2)
另一个选项是为要排序的列使用表达式。
DECLARE @OrderBy INT
SET @OrderBy = 4
SELECT *
FROM MySourceTable
ORDER BY COL_NAME(OBJECT_ID('MySourceTable'), @OrderBy )
如果可以,通常最好避免使用动态SQL。
答案 2 :(得分:-1)
您将使用字符串连接和sp_executesql。