SQL使用var作为表名

时间:2017-07-10 08:41:37

标签: sql sql-server tsql

我有这段代码而不是每次运行查询时在每个字段中重复表名,我只想将表名设置为变量并使用它,我的代码不起作用,谁能指出我正确的方向?

 DECLARE @table_name varchar(20)
 SET @table_name = 'test_table'

 IF object_id(@tableName) is not null --    object_id('TABLE_NAME')
 PRINT 'Table Exists'
ELSE
    CREATE TABLE [@tableName]( --TABLE DOES NOT EXIST, THIS WILL EXECUTE
    [ContactID_ContactID] [tinyint] NOT NULL,
[OrganisationID_OrganisationID] [int] NOT NULL,
[Note] [nchar](300) NULL
)

这只是查找表是否存在,如果不存在,它将创建表

6 个答案:

答案 0 :(得分:3)

您需要动态查询才能从变量

获取表名
DECLARE @table_name varchar(20)
 SET @table_name = 'test_table'

 IF object_id(@tableName) is not null --    object_id('TABLE_NAME')
 PRINT 'Table Exists'
ELSE
    exec('CREATE TABLE ['+@tableName+']( --TABLE DOES NOT EXIST, THIS WILL EXECUTE
    [ContactID_ContactID] [tinyint] NOT NULL,
[OrganisationID_OrganisationID] [int] NOT NULL,
[Note] [nchar](300) NULL
)')

答案 1 :(得分:1)

DECLARE @tableName sysname = N'test_table';
DECLARE @query NVARCHAR(1000);

IF OBJECT_ID(@tableName, 'U') IS NOT NULL --    object_id('TABLE_NAME')
    PRINT 'Table Exists';
ELSE
BEGIN
    --TABLE DOES NOT EXIST, THIS WILL EXECUTE
    SET @query = N'
    CREATE TABLE ' + QUOTENAME(@tableName) + N' (
        [ContactID_ContactID] [tinyint] NOT NULL,
        [OrganisationID_OrganisationID] [int] NOT NULL,
        [Note] [nchar](300) NULL);';

    EXECUTE sp_executesql @query;
END;

您必须使用动态SQL才能执行此操作。另请注意,我稍微改变了一些:

  • @tableName变量类型为sysname
  • 如果要检查'U'的条件(仅限表格)
  • QUOTENAME()'你的表变量名,SQL Server将确保它是一个有效的名称,并将阻止SQL注入的可能性。

答案 2 :(得分:1)

动态SQL就是您所需要的,例如:

 DECLARE @table_name varchar(20) = 'test_table'


 IF object_id(@table_name) is not null --    object_id('TABLE_NAME')
 PRINT 'Table Exists'
ELSE

exec(
'CREATE TABLE ' + @table_name +' (
[ContactID_ContactID] [tinyint] NOT NULL,
[OrganisationID_OrganisationID] [int] NOT NULL,
[Note] [nchar](300) NULL
)')

答案 3 :(得分:1)

我的解决方案如下:

 DECLARE @table_name varchar(20)
 DECLARE @sql_statement varchar(5000)
 SET @table_name = 'test_table'

 IF object_id(@table_name) is not null --    object_id('TABLE_NAME')
 BEGIN
    PRINT 'Table Exists'
 END
 ELSE
 BEGIN
    SET @sql_statement = 'CREATE TABLE ' + @table_name + ' 
                         ( 
                            [ContactID_ContactID] [tinyint] NOT NULL,
                            [OrganisationID_OrganisationID] [int] NOT NULL,
                            [Note] [nchar](300) NULL
                          )'
    EXEC (@sql_statement)
 END

答案 4 :(得分:0)

您必须动态生成SQL。使用 sp_executesql

以下文章将有所帮助:http://www.sommarskog.se/dynamic_sql.html

答案 5 :(得分:0)

动态SQL是您正在寻找的东西:

语法是:

DECLARE @tableName varchar(20);
SET @tableName = 'test_tbl2';
DECLARE @SQLString NVARCHAR(MAX);


IF object_id(@tableName) is not null
PRINT 'Table Exists'
ELSE
SET @SQLString = 'CREATE TABLE ['+@tableName+']( 
                        [ContactID_ContactID] [tinyint] NOT NULL,
                        [OrganisationID_OrganisationID] [int] NOT NULL,
                        [Note] [nchar](300) NULL
                    )'
EXEC (@SQLString)

因此,

    @Override
    protected void onPostExecute(Object result) {
        // dismiss the dialog once product deleted
        //Toast.makeText(getApplicationContext(),result,Toast.LENGTH_LONG).show();

        try {
            Log.d(result.toString(),"resultvalue");
            if (result != null) {

                Toast.makeText(getApplicationContext(),result.message, Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(getApplicationContext(), "Unable to retrieve any data from server", Toast.LENGTH_LONG).show();
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }


    }