2014-05-23 3 views
0

나는이 코드를 sql에서 테이블을 생성하는 스크립팅과 관련있다. SQL 서버에서이 코드를 실행하면 코드가 작동한다. 그러나, netbeans java rs=stmt.executeQuery() 함께이 코드를 실행할 때 코드가 작동하지 않습니다. 나는 이유를 모른다. 내가 무엇을 할 수 있을지?SQL에서 테이블을 생성하는 스크립트

DECLARE @table_name SYSNAME 


DECLARE 
     @object_name SYSNAME= '[dbo].[NAMEANDNUMBER]' 
    , @object_id INT = 245575913 



DECLARE @SQL NVARCHAR(MAX) = '' 

;WITH index_column AS 
(
    SELECT 
      ic.[object_id] 
     , ic.index_id 
     , ic.is_descending_key 
     , ic.is_included_column 
     , c.name 
    FROM sys.index_columns ic WITH (NOWAIT) 
    JOIN sys.columns c WITH (NOWAIT) ON ic.[object_id] = c.[object_id] AND ic.column_id = c.column_id 
    WHERE ic.[object_id] = @object_id 
), 
fk_columns AS 
(
    SELECT 
      k.constraint_object_id 
     , cname = c.name 
     , rcname = rc.name 
    FROM sys.foreign_key_columns k WITH (NOWAIT) 
    JOIN sys.columns rc WITH (NOWAIT) ON rc.[object_id] = k.referenced_object_id AND rc.column_id = k.referenced_column_id 
    JOIN sys.columns c WITH (NOWAIT) ON c.[object_id] = k.parent_object_id AND c.column_id = k.parent_column_id 
    WHERE k.parent_object_id = @object_id 
) 
SELECT @SQL = 'CREATE TABLE ' + @object_name + CHAR(13) + '(' + CHAR(13) + STUFF((
    SELECT CHAR(9) + ', [' + c.name + '] ' + 
     CASE WHEN c.is_computed = 1 
      THEN 'AS ' + cc.[definition] 
      ELSE UPPER(tp.name) + 
       CASE WHEN tp.name IN ('varchar', 'char', 'varbinary', 'binary', 'text') 
         THEN '(' + CASE WHEN c.max_length = -1 THEN 'MAX' ELSE CAST(c.max_length AS VARCHAR(5)) END + ')' 
        WHEN tp.name IN ('nvarchar', 'nchar', 'ntext') 
         THEN '(' + CASE WHEN c.max_length = -1 THEN 'MAX' ELSE CAST(c.max_length/2 AS VARCHAR(5)) END + ')' 
        WHEN tp.name IN ('datetime2', 'time2', 'datetimeoffset') 
         THEN '(' + CAST(c.scale AS VARCHAR(5)) + ')' 
        WHEN tp.name = 'decimal' 
         THEN '(' + CAST(c.[precision] AS VARCHAR(5)) + ',' + CAST(c.scale AS VARCHAR(5)) + ')' 
        ELSE '' 
       END + 
       CASE WHEN c.collation_name IS NOT NULL THEN ' COLLATE ' + c.collation_name ELSE '' END + 
       CASE WHEN c.is_nullable = 1 THEN ' NULL' ELSE ' NOT NULL' END + 
       CASE WHEN dc.[definition] IS NOT NULL THEN ' DEFAULT' + dc.[definition] ELSE '' END + 
       CASE WHEN ic.is_identity = 1 THEN ' IDENTITY(' + CAST(ISNULL(ic.seed_value, '0') AS CHAR(1)) + ',' + CAST(ISNULL(ic.increment_value, '1') AS CHAR(1)) + ')' ELSE '' END 
     END + CHAR(13) as cr_sql 
    FROM sys.columns c WITH (NOWAIT) 
    JOIN sys.types tp WITH (NOWAIT) ON c.user_type_id = tp.user_type_id 
    LEFT JOIN sys.computed_columns cc WITH (NOWAIT) ON c.[object_id] = cc.[object_id] AND c.column_id = cc.column_id 
    LEFT JOIN sys.default_constraints dc WITH (NOWAIT) ON c.default_object_id != 0 AND c.[object_id] = dc.parent_object_id AND c.column_id = dc.parent_column_id 
    LEFT JOIN sys.identity_columns ic WITH (NOWAIT) ON c.is_identity = 1 AND c.[object_id] = ic.[object_id] AND c.column_id = ic.column_id 
    WHERE c.[object_id] = @object_id 
    ORDER BY c.column_id 
    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, CHAR(9) + ' ') 

IF(ISNULL(@SQL,'') ='') 
BEGIN 
    Print @table_name + ' does not exists' 
END 
ELSE 
Begin 
PRINT @SQL 

End 
+0

SQL Server 관리 도구 에서처럼 Java에서 동일한 데이터베이스 사용자를 사용하고 있습니까? – Scoregraphic

+0

오류 메시지 (특히 DB의 경우)? –

+1

어떤면에서 "작동하지 않습니까?" 완전히 실패합니까? 부분적으로 완료 되었습니까? 실행 하나 기대했던 결과와 다른 결과가 나옵니까? 오류 메시지가 나타나면 게시하십시오. – alroc

답변

0

결과는 예상되지만 인쇄 명령문을 사용하고 있습니다. printselect으로 변경해보세요. 이

IF (ISNULL(@SQL,'') ='') 
BEGIN 
    SELECT @table_name + ' does not exists' 
END 
ELSE 
BEGIN 
    SELECT @SQL 
END 

object_id 245575913이 존재하지 않는 경우 다음 @table_name + ' does not exists'에 값이 할당되지 않습니다 null@table_name로 될 것입니다 점에 유의 줄 것이다.

관련 문제