database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 2142 게시물 읽기
No. 2142
mssql에서 mysql에서처럼 show create table 과 같은역할을 하는 구문은
작성자
bright
작성일
2005-07-23 11:36
조회수
8,230

mysql 에서 show create table 과 같은 역할을 하는

mssql의 구문은 없나요?

즉 mssql 쿼리문 중에서 테이블 생성 쿼리를 알수있는 쿼리는 없는지요.

이 글에 대한 댓글이 총 14건 있습니다.

MySQL 보다 훨씬 ~ 강력한 템플릿이 지원됩니다.

쿼리분석기에서 개체보기 옆에 있는 템플릿을 눌러보세요

거기서 Create table 이라는 항목이 있는데

거기서

원하시는 모델을 고르시고

ctrl + shift + M 하시면 ^^ 치환으로 간단하게 완성할 수 있는

메뉴가 보일겁니다.

 

간단하기 치환하시고 엔터 하시면 ^^

석이님이 2005-07-23 11:41에 작성한 댓글입니다. Edit

네. 근데 제가 원하는건 프로그래밍 도중에 알고싶은 겁니다.

gui 프로그램에서 마우스 클릭해서 얻는 결과물이 아니라

프로그램 처리도중 테이블 이름을 가지고 해당 테이블의 create 문을 알고 싶은거죠.. 그걸 어떻게 구하는건지...

김지현님이 2005-07-23 11:43에 작성한 댓글입니다. Edit

^^;

해당 테이블에서 개체분석기에서 해당테이블 오른쪽 마우스

script object to new window as create 라고 하면 되겠죠?

 

석이님이 2005-07-23 11:47에 작성한 댓글입니다. Edit

sp_help tableName 이것도 있습니다.

아니면

select * from information_schema.columns where table_name ='tableName'

도 있고요...

편하신 데로 쓰셔요

 

석이님이 2005-07-23 11:55에 작성한 댓글입니다. Edit

제 말을 정확히 이해 못하신거 같습니다.

그러니깐.. 음 예를 들자면

<?

$create_sql = "show create from tableA";

$res = mysql_query($create_sql);

$row = mysql_fetch_array($res);

$create_table = $row[0];

?>

// 머 대충 이런식으로 하면 mysql 에서는 해당 테이블 tableA에 대한

테이블 생성문을 변수로 뽑아올수 있으며 그걸가지고 테이블을 삭제한 경우에도 다시 쿼리문으로 생성하거나 그런것들이 가능합니다.

 

근데 mssql db를 사용하면서 em,쿼리분석기등 윈도에서 쓰는 그런 프로그램들 사용 안하구요. 소스코드 상에서 말입니다.

php 소스에서 em이며 쿼리분석기등을 사용할리가 없잖습니까.

위 소스처럼 mssql에서 가능한 쿼리문

mysql의 "show create table" 과 같은역할을 하는

mssql의 "xxxx xxxxx xxxx" 이게 뭔지 알고싶은겁니다...

에휴 힘들어 ~_~;

김지현님이 2005-07-23 11:56에 작성한 댓글입니다. Edit

제가 원래 머리가 좀 나빠요 ㅠ.ㅠ

 

 

 

 

 

Text                                                                                                                                                                                                                                                           
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
create      Proc usp_ColumnSchema
(@DbName varchar(100)='',@TableName varchar(100) = '')
as
declare @sql varchar(4000)
IF @TableName=''
             set @sql='select b.name ColumnName, c.name TypeName, b.length ColumnLength
                                        , Case b.IsNullable when 1 then '''' else ''NN'' end Nullable
                                        , Case When g.name is null Then '''' Else ''PK'' End PKwithCidx
                                        , IsNull(d.value,'''') Caption 
                           from '+@DbName+'..sysobjects a
                                        JOIN '+@DbName+'..syscolumns b ON (a.id = b.id and a.type=''U'' and a.status > 0)
                                        JOIN '+@DbName+'..systypes c ON (b.xtype = c.xtype and c.name<>''sysname'')
                                        LEFT JOIN '+@DbName+'..sysproperties d ON  (b.id=d.id and b.colid = d.smallid)
                                        LEFT JOIN (select name,e.id,colid from '+@DbName+'..sysindexes e join '+@DbName+'..sysindexkeys f on e.id=f.id
                                                     where e.id > 10000000 and e.indid=1 and f.indid=1) g ON (g.id=b.id and g.colid=b.colid)
                           order by a.name, colorder'
ELSE
             set @sql='select   b.name ColumnName, c.name TypeName, b.length ColumnLength
                                        , Case b.IsNullable when 1 then '''' else ''NN'' end Nullable
                                        , Case When g.name is null Then '''' Else ''PK'' End PKwithCidx
                                        , IsNull(d.value,'''') Caption 
                           from '+@DbName+'..sysobjects a
                                        JOIN '+@DbName+'..syscolumns b ON (a.id = b.id and a.type=''U'' and a.status > 0 and a.name='''+@TableName+''')
                                        JOIN '+@DbName+'..systypes c ON (b.xtype = c.xtype and c.name<>''sysname'')
                                        LEFT JOIN '+@DbName+'..sysproperties d ON  (b.id=d.id and b.colid = d.smallid)
                                        LEFT JOIN (select name,e.id,colid from '+@DbName+'..sysindexes e join '+@DbName+'..sysindexkeys f on e.id=f.id
                                                     where e.id > 10000000 and e.indid=1 and f.indid=1) g ON (g.id=b.id and g.colid=b.colid)
                           order by a.name, colorder'
Exec(@sql)

 

 

 

 

 

 

 

 

 

 

 

<!--#include virtual="xx/xx.asp"-->
<%
startTime = Timer() '수행속도를 검증하기 위하여
%>
<style type='text/css'>
td { font-size: 9pt; }
</style>
<%
'dim strConnect, db
'strConnect="DB_ConnectString"
'Set db = Server.CreateObject("ADODB.Connection")
'db.Open strConnect
dbOpen "db_webmail.inc"
rsOpen

'db UserTalbe을 커서화 시킴
dbName = "webmail"
Sql = "select name, id from "& dbName &"..sysobjects where xType = 'u' order by 1 "
'set rs = db.Execute(sql)
'dtName = rs.GetRows
'rs.Close
'Set rs = Nothing
'intRows = Ubound(dtName,2)
rs.Open Sql, db, 3
dtName = rs.GetRows
rs.Close
Set rs = Nothing
intRows = Ubound(dtName,2)
 

For i = 0 to intRows
 TabName = dtName(0, i)
 Sql = "exec usp_columnSchema '" & dbName & "', '" & TabName & "'" '요게 바로 핵심라인입니다.
 set rs = db.Execute(sql)
 if Not(rs.EOF) or Not(rs.BOF) then

  'Table Name
  Response.write "<table width='700' border='1' cellpadding='5' cellspacing='0' bgcolor='#CCCCCC' style='border-collapse: collapse; border:#111111 1px solid'><tr>" & vbcrlf
  Response.Write "<td bgcolor='#FFF7FF'><font color='blue'>" & dbName & ".." & TabName & "</font></td>" & vbcrlf
  Response.Write "</tr></table>" & vbcrlf
  'Table Head

  dtTable = rs.GetRows
  intTableC = Ubound(dtTable,1)
  intTableR = UBound(dtTable, 2)

  Response.write "<table width='700' border='1' cellpadding='5' cellspacing='0' bgcolor='#EFEFEF' style='border-collapse: collapse; border:#111111 1px solid'><tr height=15>" & vbcrlf
  for j = 0 to intTableC
   Response.write "<td>" & rs(j).Name  & "</td>"  & vbcrlf
  Next
  Response.write "</tr><tr bgcolor='#FFFFFF'>"  & vbcrlf
  rs.Close
  set rs = Nothing
  
  'Table Data 출력
  for r= 0 to intTableR
   for c = 0 to intTableC
    Response.write "<td width='16%'>" & dtTable(c, r) & "</td>" & vbcrlf
   next
  Response.write "</tr><tr bgcolor='#FFFFFF'>" & vbcrlf
  next
  Response.write "</table><br>" & vbcrlf
 End if
Next
'DB.close
rsClose
dbClose
set DB = nothing
endTime = timer() '수행속도를 검증하기 위하여..
%>
Total_Time = <%=FormatNumber(endTime - startTime,2)%> sec

 

 

 

 

 

 

여리형님이 만드신거 ^^;

응용해서 만드세요 mssql 에서 프로그램에서 그렇게 불러쓰는 방법은 없을듯 하고 이렇게 만들어야 합니다.

 

뭐든 못하는게 어디 있겠어요 ^^;

 

 

석이님이 2005-07-23 12:09에 작성한 댓글입니다.
이 댓글은 2005-07-23 12:10에 마지막으로 수정되었습니다. Edit

한때 심심해서 mssql 과 asp 써서 phpmyadmin 과 비슷한걸 만들다 만적 있는데...

프로시져를 만드셔야 할겁니다. 시스템 테이블에서 컬럼명,타입은 알 수 있으니 그걸 기초로 테이블 생성문은 만들어 내셔야죠..

이경환(babocom)님이 2005-07-23 13:44에 작성한 댓글입니다.
이 댓글은 2005-07-26 23:12에 마지막으로 수정되었습니다.

음.. 그럼 결국 쿼리문 하나로 바로 해결은 안된다는 얘기군요.

테이블 구조를 짜집기해서 만들어야 한다는거네요 ㅡ.ㅡ;;

여러가지 조언 고맙습니다.

김지현님이 2005-07-23 13:59에 작성한 댓글입니다. Edit

글과는 전혀 관계없지만서도...

여리님.. 남성분이셨군요.. OTL...

voy님이 2005-07-25 11:16에 작성한 댓글입니다. Edit

김지현님의 정곡을 찌르는듯한 질문인거 같아요....

이창민(Prosper)님이 2005-07-25 19:43에 작성한 댓글입니다.

죄송합니다. 앞으로는 그냥 없습니다. 라고 간단하게 달겠습니다. ..

 

석이님이 2005-07-25 23:08에 작성한 댓글입니다. Edit

음.. 긴 댓글이었네요.

 

확장이나 유연에 대한 것을 이야기 해보고자 합니다.

그것은 하나에 고집할 때에는 이미 그것에 끼워맞추고자 하는 경향이 있기에

더 큰것, 또 다른 길을 볼수 없게 만들수도 있습니다.

 

때로 길이 아니더라도 가봐야 함이 바로 多作의 길일 것이며

비록 시간이 걸린다 하더라도 그것으로 인해

더욱 깊은 생각(), 궁극적으로 더 낳은 로직을 찾을 수 있다면

좋겠지만 그게 아니어도 다른 시각으로 볼 수 있는 눈을 가지게 되었다면

더욱 더 값진 것이라 할 수 있습니다.

 

mysql에서 show create table이라는 명령에 상응하는 mssql의 명령은 없나요?

그에 대한 답은 예, 아니오 둘 뿐일 것입니다.

이는 다작이나 다상량으로 볼때는 전혀 가치 없는 질문이 될 듯합니다.

(물론 있다면 나열되겠지만요 ^^)

 

mysql에서 show create table은 이런 역할을 하는 명령인데

mssql에서는 이와 같은 함수를 구현하려면 어떻게 해야할까요?

라는 질문에는

위의 예, 아니오가 포함될 뿐더러

더 나은 로직이 나올수도 있지 않을까 싶습니다.

 

아마도 석이님이 고민했던 것이 바로 그런 맥락이 아닐까 합니다.

(문맥상 mssql에서는 바로 그런 기능을 하는 것이 없으나 이렇게 하면

그와 같은 기능을 할 수 있지 않을까요?)

결론적으로 예, 아니오의 답을 원하는 질문에 더 나아가 고민을 해준답이지 않을까 합니다. ^^

 

이건 다른 누구를 원망하거나 질책이 아님을 전제하며

이 글에 태클도 마다 하지 않겠습니다.

 

여리님이 2005-07-26 09:57에 작성한 댓글입니다. Edit

여리님 말씀도 좋은 말씀이십니다.

물론 댓글 달아주시느라 수고하신 석이님도 수고하셨구요 ^_^

mssql을 많이 접해보지 않았던 저로서 알고자 했던건 mysql에서와 같이 쿼리문 한줄로 해결이 어떻게 되지않을까.. 하는 바램에서 글을 남겼었는데 어찌됐던 결론은 없다는걸 알았네요. 물론 질문을 하기전에 테이블 구조를 불러다가 할 생각도 해봤지만 좀더 쉬운 방법이 있다면 그리 하는게 좋겠지요. 개발이란게 시간싸움이기도 하니...

(결국은 지금 스키마 불러다가 짜집기해서 해놨죠 -_-)

 

한두해 이바닥 일을 하다보니 단순히 코딩해서 만드는 것보다 중요한게 "해결방법" 을 찾는다는게 중요한거 같네요.

김지현님이 2005-07-26 23:21에 작성한 댓글입니다. Edit

흠 시스템 테이블을 읽어서 저런걸 할 줄 아는 사람이 과연 여기다가

글을 올렸을까 하는 의문이 드는군(혼자 생각)

 

시스템 테이블을 불러서 핸들링 할 수 있는사람이 단지 저런 같은 기능이 있을까 라고 물을때는

 

"제가 알기로는 시스템 테이블을 조사해서 mysql 에 있는 함수와 비슷한 기능을 만들수도 있을것 같은데, 비슷한 기능을 하는 함수가 있나요?" 라고 물었겠습니다.

 

보아하니 몇년했다는걸 보니 다른 디비를 쓰던 사람(mysql) 을 한사람 같은데요 mssql 에서 저런걸 구현하기 위해서 어찌했건 여리님의 스크립트를 보고 힌트를 얻어서 구현하지 않았나요?

 

그럼 없었지만 도움을 얻어 잘 했습니다. 이렇게 말해야 하는지

 

대답에 없어요 라고 했을때 뒤에는 "그럼 어떻게 시스템 테이블을 읽어서는 할 수 없는지요" 라고 묻지 않았을지 아니면 기능을 포기 했던지

말은 어 다르고 아 다른데 조심해서 하기 바랍니다.

아니면 다른 게시판에 또 열심히 묻고 구걸하러 다녔겠죠 찾아볼 마음 없이

 

왜이리 말하는게 미운 오리 같은지......

 

석이님이 2005-07-27 01:12에 작성한 댓글입니다.
이 댓글은 2005-07-27 01:48에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
2145attach 발생한 에러 입니다. [2]
attacher
2005-07-25
3858
2144currval과 같은 기능은 없나요? [1]
lee
2005-07-25
2637
2143셀프조인을 이용한 카테고리 구현 ? [5]
석이
2005-07-24
4719
2142mssql에서 mysql에서처럼 show create table 과 같은역할을 하는 구문은 [14]
bright
2005-07-23
8230
2141특수문자를 포함한 검색 질문 입니다. [4]
석이
2005-07-23
5919
2140날짜 컬럼에 NonCulsterindex를 만들어주면.. [2]
SQL초보
2005-07-22
2663
2139인덱스(index) 삭제하는 방법 [2]
신현주
2005-07-22
2488
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.016초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다