2016-09-04 4 views
1

동적 저장 쿼리를 저장 프로 시저에 쓰고 있습니다. 내 저장 프로 시저에 매개 변수로 열 이름을 받고 있습니다.동적 SQL Server 쿼리

예를 들어, EmployeeIdEmployeeName 열을 가진 Employee 테이블이 있습니다. 테이블 Employee 테이블에서 Department 테이블에 데이터를 삽입하는 동안 각 직원 이름 앞에 EMP_을 추가해야합니다.

비 동적 쿼리는 다음과 같습니다.

INSERT INTO Department(EmployeeId, EmployeeName) 
    SELECT 
     EmployeeId, 'EMP_' + EmployeeName 
    FROM 
     Employee 

나는

SET @SqlCommand = 
      'INSERT INTO ' + @DepartmentTable + '(' + @EmployeeIdColumn + ',' + @EmployeeNameColumn + ')' + 
      'SELECT ' + @EmployeeIdColumn + ',''EMP_''' + @EmployeeNameColumn + '''' +  
      'FROM ' + 
       @EmployeeTable + ' WTB ' 

     EXEC sp_executesql 
     @stmt  = @SqlCommand 

문제는 동적 삽입합니다 EmployeeName 열에 대해, 그것은 "EMP_EmployeeName"을 삽입되는 대신 실제 직원 이름을 작성하는 경우. EmployeeNameColumn 전후에 따옴표를 넣으려고했으나 작동하지 않았습니다. 어떻게 해결할 수 있습니까?

+1

APPEND "EMP"을 각 직원의 이름 앞에. @EmployeeNameColumn은 저장된 proc이받는 열 이름입니다. – turbo88

+0

이것은 답변이되지 않았지만,이 블로그 게시물을 읽으라고 강력히 권합니다. 나는 동적 인 SQL을하고있는 Im 언제든지 그것을 다시 참조한다. 그것은 안전한 (매개 변수화 된) 및 효율적인 http://www.sommarskog.se/dynamic_sql.html#good_practices 둘 다 동적 SQL을 달성하는 "모범 사례"방법에 대해 자세히 설명합니다. – bUKaneer

+0

@ turbo88 안녕하세요! 제공된 솔루션 중 하나를 시도해 보셨습니까? – gofr1

답변

0

EMP_'' 뒤에 +이 하나만 필요하고 ' WTB ' 이후에 제거하십시오. 당신이 이런 식으로 뭔가를 얻을 것이다 PRINT @SqlCommand 경우

SET @SqlCommand = 
'INSERT INTO ' + @DepartmentTable + ' (' + @EmployeeIdColumn + ',' + @EmployeeNameColumn + ')' + 
' SELECT ' + @EmployeeIdColumn + ',''EMP_''+' + @EmployeeNameColumn +  
' FROM ' + @EmployeeTable + ' WTB ' 

:

INSERT INTO Department (EmpId,EmpName) SELECT EmpId,'EMP_'+EmpName FROM Employee WTB 

그리고 하나의 노트 : 더 나은 테이블/열 이름과 QUOTENAME를 사용 또한 내가 어떤 공간을 고정. 그것은 열이 '직원 이름'과 같은 이름에 공백이 곳 상황을 방지하는 데 도움이 될 것입니다 :

SET @SqlCommand = 
'INSERT INTO ' + QUOTENAME(@DepartmentTable) + '(' + QUOTENAME(@EmployeeIdColumn) + ',' + QUOTENAME(@EmployeeNameColumn) + ')'+ 
' SELECT ' + QUOTENAME(@EmployeeIdColumn) + ',''EMP_''+' + QUOTENAME(@EmployeeNameColumn) + 
' FROM ' + QUOTENAME(@EmployeeTable) + ' WTB ' 

을 얻으려면 :

INSERT INTO [Department]([EmpId],[EmpName]) SELECT [EmpId],'EMP_'+[EmpName] FROM [Employee] WTB 
0

CONCAT 기능을 사용해보십시오.

-- Syntax for SQL Server, Azure SQL Database, Azure SQL Data Warehouse, Parallel Data Warehouse 

CONCAT (string_value1, string_value2 [, string_valueN ]) 

귀하의 질의는 다음과 같을 것이다 :

INSERT INTO deptTable(empId,empName) 
SELECT empId,concat('EMP_', empName) as empName FROM empTable 

PS : 나는 당신의 질문을 오해 같은데.

INSERT INTO deptTable(empId,empName) 
SELECT empId,'SUFFIX'+empName as empName FROM empTable 

도 작동합니다. 나는 당신이 저장된 proc을 원했던 것 같다.

어쨌든 concat은 여전히 ​​그렇게해야합니다.