2014-06-24 3 views
0

약 50 개의 열이있는 SQL 테이블이 있습니다. 나는 각각 foreach 루프와 비슷한 반복을 할 수 있기를 원한다. 각 열을 반복 할 때 끝 부분에 작은 따옴표가 하나씩 있는지 확인하고 싶으면 제거하십시오.SQL 테이블의 각 열을 반복합니다.

나는이 솔루션을 밖으로 내장되어 있지만 명시 적으로 열 이름을 정의 아래 참조 : 이것은 잘 작동하지만 오류의 몇 가지 가능성을 소개

select BrandName = 
    (CASE 
     WHEN (BrandName like '%"') THEN LEFT(BrandName, LEN(BrandName) - 1) 
     ELSE BrandName 
    END), 
    emailSubject = 
    (CASE 
     WHEN (emailSubject like '%"') THEN LEFT(emailSubject , LEN(emailSubject) - 1) 
     ELSE emailSubject 
    END), 
    -- and so on... 
    from tableName 

.

foreach column c in table 
    if (c.EndsWith('"')) 
     c.RemoveEndCharacter() 

이 가능, 그렇다면 당신은 내가 T-SQL에서 이러한 솔루션을 구현하는 방법에 대한 몇 가지 예를 제공 할 수 있습니다 : 나는 (의사) 그런 짓을 할 이유 그래서,이 무엇입니까?

감사합니다.

+2

['sys.columns'] (http://msdn.microsoft.com/en-US/en-en/library/ms176106.aspx)를 기반으로 SQL 스크립트를 생성 할 수 있습니다. 그러나 C# 또는 Python 또는 이와 유사한 언어로 된 클라이언트 쪽이 훨씬 편할 것 같습니다. – Andomar

+0

당신은 sql에서 반복 할 수 있지만 일반적으로 필요는 없습니다. 배열을 통해 명시 적으로 실행해야하는 다른 언어와 달리 sql은 테이블 데이터를 기반으로 구성됩니다. sql이 이미 각 데이터 행을 평가하여 사용자의 기준에 맞는지 확인하기 때문에이 문제를 어떻게 생각하는지 변경하십시오. 이 상황에서는 업데이트가 정상적으로 작동합니다. SQL이 당신을 위해 작업을 수행하게하십시오. 이런 유형의 문제를 해결하는 것은 정말 좋습니다. – Jenn

+0

.NET을 사용해도 되니? – Paparazzi

답변

3

tsql 문을 생성하여 테이블을 아래 코드로 업데이트 할 수 있습니다. 문을 실행 한 다음 결과를 새 쿼리 창에 복사하여 붙여넣고 실행합니다. 또는 커서에 대해 아래 쿼리를 사용하여 각 반복에서 출력을 실행할 수 있습니다.

SELECT 'UPDATE [' + c.TABLE_SCHEMA + '].[' + c.TABLE_NAME + '] SET [' + c.COLUMN_NAME + '] = LEFT([' + c.COLUMN_NAME + '], LEN([' + c.COLUMN_NAME + ']) - 1) WHERE [' + c.COLUMN_NAME + '] LIKE ''%"''' 
FROM INFORMATION_SCHEMA.COLUMNS c 
JOIN INFORMATION_SCHEMA.TABLES t 
    ON t.TABLE_SCHEMA = c.TABLE_SCHEMA 
    AND t.TABLE_NAME = c.TABLE_NAME 

--For simple demo purposes, assume tables only. 
WHERE t.TABLE_TYPE = 'BASE TABLE' 

--Did I miss any data types? 
AND c.DATA_TYPE IN ('NVARCHAR', 'VARCHAR', 'NCHAR', 'CHAR') 

--Replace values with your corresponding schema/table name. 
AND c.TABLE_SCHEMA = 'dbo' 
AND c.TABLE_NAME = 'YourTableName' 

ORDER BY c.TABLE_SCHEMA, c.TABLE_NAME, c.ORDINAL_POSITION 
+0

'QuoteName' !!!! – podiluska

관련 문제