2013-09-29 2 views
0

아래 SQL 참조하세요동적 SQL CONCATENATE 문자열

declare @TableName VarChar(100) 
declare @field1 varchar(100) 
declare @field2 varchar(100) 
set @TableName = 'Person.Person' 
set @field1 = 'LastName' 
set @field2 = 'FirstName' 
Declare @SQL VarChar(1000) SELECT @SQL = 'SELECT ' + @field1 + ',' + @field2 + ' FROM ' 
SELECT @SQL = @SQL + @TableName 
Exec (@SQL) 

결과 집합 즉 firstName과 성씨 2 열로 나타난다. 출력이 이렇게 표시되도록 열을 연결할 수 있습니까?

Ian,McFearce 
Jane,McAndrew 

나는이 웹 사이트에 견적을 발견했다 : http://technet.microsoft.com/en-us/library/ms188001.aspx을, 어떤 상태 : "+ 연산자로 두 문자열을 연결, 허용되지 않습니다." 그러므로 나는 그것이 불가능하다고 생각한다. 해결 방법이 있습니까?

+0

ur sql은 성을 선택해야합니다. ','+ 사람의 성을 – mhn

+0

'@ TableName'은 어디에서 왔습니까? 사람들이 어떤 테이블에서든 열을 선택할 수 있도록 시스템이 설계된 이유는 무엇입니까? –

+0

@Aaron Bertrand는 시스템이 서로 다른 스키마를 가진 여러 개의 로컬 데이터베이스를 검색합니다. 말이 돼? – w0051977

답변

2
declare @TableName VarChar(100) 
declare @field1 varchar(100) 
declare @field2 varchar(100) 
set @TableName = 'dbo.Person' 
set @field1 = 'LastName' 
set @field2 = 'FirstName' 
Declare @SQL VarChar(1000) SELECT @SQL = 'SELECT ' + @field1 + '+'',''+' + @field2 + ' FROM ' 
SELECT @SQL = @SQL + @TableName 
print @sql 
Exec (@SQL) 
+0

+1 해줘서 고마워. 웹 스티의 인용문에 대해 '+ 연산자를 사용하여 두 문자열을 연결하는 것은 허용되지 않습니다.'와 같은 댓글을 달 수 있습니까? – w0051977

+0

나는 그것이 Exec (@ SQL + @ WhereClause)와 같은 것을 가질 수 없다는 것을 의미한다고 생각합니다. @stmt는 유니 코드 상수 또는 유니 코드 변수 여야합니다. – mhn

+0

마지막으로 SQL 인젝션 위험으로 인해이 접근 방식을 싫어하는 것으로 생각하십니까? – w0051977