Sql server 在sql中创建表的脚本

Sql server 在sql中创建表的脚本,sql-server,tsql,jdbc,Sql Server,Tsql,Jdbc,我有一段代码,是关于在sql中编写脚本来创建表的。当我在sql server中执行这段代码时,代码可以正常工作。但是,当我在netbeans java中使用rs=stmt.executeQuery()执行此代码时,代码不起作用。我不知道为什么。我能做什么 DECLARE @table_name SYSNAME DECLARE @object_name SYSNAME= '[dbo].[NAMEANDNUMBER]' , @object_id INT = 24557591

我有一段代码,是关于在sql中编写脚本来创建表的。当我在sql server中执行这段代码时,代码可以正常工作。但是,当我在netbeans java中使用
rs=stmt.executeQuery()
执行此代码时,代码不起作用。我不知道为什么。我能做什么

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

executeQuery
将需要一个结果集,但您使用的是打印语句。尝试将
打印
更改为
选择
。这将给

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

另请注意,如果
对象\u id
245575913不存在,则
@table\u name+'不存在'
将为
null
,因为
@table\u name
从未分配值。

您在Java中使用的数据库用户是否与SQL Server管理工具中使用的数据库用户相同?是否有任何错误消息(特别是来自DB的错误消息)?以何种方式“不工作?”是否完全失败?是否部分完成?是否执行,但得到的结果与预期不同?如果收到任何错误消息,请发布。是的,我使用的是同一个数据库用户。错误是“Théstatement未返回结果集”。请改为使用
statement.execute()
executeQuery()
仅用于-井-查询。