2013-10-15 3 views
4

프로덕션 데이터베이스의 스키마에서 만든 SQL 데이터 프로젝트가 있습니다. 모든 저장 프로 시저를 프로젝트에 가져 왔고 생성 된 스크립트를 오프라인 개발을위한 localdb.

문제는이 SQL 데이터 프로젝트가 생성하지만이이 $( 포함 된 문자열을 발견 한 첫 번째 인스턴스에 갇히지 SQL 스크립트를 확인하려고 나타나는 것입니다.

예 1 INSERT INTO mytable (text) VALUES ('$(')

이로 인해 오류가 발생합니다.

$ ('이 (가) 파싱되는 동안 잘못된 구문이 발생했습니다.

예 2 INSERT INTO mytable (text) VALUES ('$(this')

이 $ (이 '구문 분석하는 동안 잘못된 구문이 발생했습니다

오류가 발생합니다.

그 버그에있는 것 같아 SQL 데이터 프로젝트는 SQL Management Studi에서 스크립트가 잘 실행 되더라도 배포가 성공하지 못하게하는 유효성 검사 구문을 분석합니다. 영형.

UPDATE 나는 몇 가지 아이디어를 시도하고 문제가 SQL 데이터 프로젝트는 문자열을 구문 분석하고 $(가 발생되어 특히 때 보인다. 또한 $ 다음에 나오는 모든 문자는 작은 따옴표의 다음 인스턴스까지 오류에 의해 포착됩니다 (작은 따옴표 나 작은 따옴표의 이스케이프가되어야 함)

답변

2

SQL 데이터 도구에서 데이터베이스 배포를 위해 생성하는 스크립트는 변수 바꾸기를 수행하는 방법으로 $()을 사용하는 것으로 보입니다. 이 문제를 해결하려면 나는 $()

파서가 변수로 볼하려고하지 것이다이 방법을 나타내는

CHAR(36) + '()' 로 문자열의 내용을 대체했다.

1

이 : - 당신은 SQL에서 삽입하는 경우

INSERT INTO mytable (text) VALUES ('''I''''''m Sure this broke things''') 

당신이 시도 할 수 있습니다 : -

DECLARE @Value varchar(50) 
SET @Value = 'I''m Sure this broke things' 
INSERT INTO Table1 (Column1) VALUES (@Value) 

당신은 ADO.NET을 사용하는 경우 다음과 같이하십시오 :

using (SqlConnection conn = new SqlConnection(connectionString)) { 
    conn.Open(); 
    using (SqlCommand command = conn.CreateCommand()) { 
     command.CommandText = "INSERT INTO Table1 (text) VALUES (@Value)"; 

     command.Parameters.AddWithValue("@Value", "'I''m Sure this broke things'"); 

     command.ExecuteNonQuery(); 
    } 
} 
0
DECLARE @data varchar(50) 
SET @data = 'I''m Sure this broke things' 
INSERT INTO mytable (text) VALUES (@data)