2016-06-07 2 views
-1

ORDER BY <Country>을 매개 변수로 사용하여 해당 열의 국가 별 쿼리 순서를 반환하는 저장 프로 시저를 만들려고합니다. 지금까지 내가 만든 것은 거칠다. 어떤 도움도 감사하겠다!SQL Server에서 저장 프로 시저 만들기

USE AdventureWorks2014 
GO 

CREATE PROCEDURE dbo.uspSort @CCountry nvarchar(15) 
AS 
    SELECT 
     ContactName, CompanyName, Region, Country 
    FROM 
     dbo.Customers 
    ORDER BY 
     Country 
GO 
+4

음 ... 코드에서 매개 변수를 사용하고 있지 않습니다. 그러나 더 큰 관심사는 당신이 여기에서하려고하는 것을 정말로 분명하지 않다는 것입니다. 주문으로 사용할 열의 이름을 전달하려고합니까? 그렇다면 아마도 nvarchar (15) 대신 sysname으로 데이터 유형을 변경해야합니다. 그리고 실제로이 작업을 수행하려면 동적 SQL을 사용해야합니다. 즉, SQL 삽입에주의해야합니다. 바비 테이블은 이와 같은 절차를 원합니다. –

+0

@SeanLange는 정확합니다. 정확하게하고 싶습니다. – Suehil2k

답변

1

작은 동적 SQL 도움이 될 수 있습니다

CREATE PROCEDURE dbo.uspSort (@CCountry nvarchar(15) = '1') 
AS 

Declare @SQL varchar(max) 
Set @SQL = 'SELECT ContactName, CompanyName, Region, Country FROM dbo.Customers ORDER BY '[email protected] 
Exec(@SQL) 

GO 
+3

이 작품에는 몇 가지 우려 사항이 있습니다. 첫 번째는 SQL 삽입 가능성입니다. QUOTENAME에 매개 변수를 래핑해야합니다. 두 번째 관심사는 값을 전달하지 않을 때 더 이상 사용되지 않는 기능을 사용하고 있다는 것입니다. 매개 변수를 전달하지 않을 때 서수 위치 1로 주문합니다. –

+0

큰 도움 오, 현명한 oracles, 나는 조언으로 sysname으로 nvarchar (15)를 변경했으며 모두 저장 프로 시저의 땅에 있음 – Suehil2k

+0

@ Suehil2k QUOTENAME에 해당 매개 변수를 두거나 모두 잘되지 않습니다 .... 아직. –

0
당신은 동적 SQL을하지 않으려면, 케이스 문을 사용하여 주문할 수 있습니다

. case 문의 결과는 모두 동일한 데이터 유형이어야합니다 (예 : 모든 문자열 인 것처럼 보이지만 int 및 varchar 열을 혼합하면 오류가 발생 함).

CREATE PROCEDURE dbo.uspSort @OrderColumn nvarchar(15) 
AS 
    SELECT 
     ContactName, CompanyName, Region, Country 
    FROM 
     dbo.Customers 
    ORDER BY 
     case @OrderColumn 
      when 'Country' then Country 
      when 'ContactName' then ContactName 
      when 'Region' then Region 
      when 'CompanyName' then CompanyName 
      else '' 
     end 
GO 
관련 문제