我有这段代码而不是每次运行查询时在每个字段中重复表名,我只想将表名设置为变量并使用它,我的代码不起作用,谁能指出我正确的方向?
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
)
这只是查找表是否存在,如果不存在,它将创建表
答案 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
答案 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();
}
}