A. sql语法进来看 很简单
我先说第二个问题吧:这个简单:
SELECT * INTO B FROM A
这个语句就完成了创建与复制,只是复制的数据,格式没有被复制,
insert语句是插入一些数据到已存在的对象中去.所以这里不能用INSERT.
我再说说第一个问题:我没大明白
第一步要查找到A表的主键吧,这个就比较麻烦了,要用到很多系统函数.如果你的意思是说,不用查找主键,可以直接写上去.那我再说第二步.
第二步,也是我没明白的地方,是将这个主键名作为数据插入呢,还是作为B表的一个字段名插入,这应该有区别的.
如果是作为数据插入,可以这样写:
SELECT 'AID' AS AID INTO B
注意:加单引号的AID是A表的主键名,不加引号的AID是表B的字段名.
我先说这些吧,哪里不行你再问吧.
第一个题只是复制A表的列名,不复制数据,所以只要在第二个题的基础上加上一个WHERE条件就可以了.也就是说查不出任何的数据,这样就新建了一个表,而且表的列名跟A表的列名一样,并且表中没有数据,也就是说只复制了列名.
语句就可以这样写了:
SELECT * INTO B FROM A WHERE 1<>1
1<>1是1不等于1,这样就没有一条数据满足条件,所以就是一个空表了.
另外我要说一点,弄这个的时候不管数据库名还是表名,最好起的有意义,不要随便起名,这样看上去会太随便,不好.
B. C语言 用sprintf时下标越界
sprintf(log_sql, "%s", "aaaabbbb");是将输出的字符串"aaaabbbb"拷贝到log_sql所指的内存地址空间。当您使用char *log_sql;定义log_sql时,log_sql所指的内存地址空间是未知的,可能会指向系统或其他软件正在使用的内纯空间,因此会越界。
而当您换成char log_sql[1000];后,log_sql所指的内存地址空间是一块已知的1000字节的空闲内存空间。所以不会出错。
C. sprintf在sql中的用法,c++类重载函数实现sprintf用法有何问题
你的+操作符的含义是什么哟,我的理解就是名字字符串相连接,age相加就是了
#include <iostream>
#include <cstring>
#include <string.h>
using namespace std;
class anything{
public:
anything():age(0)
{
strcpy(name, "");
}
anything(char* cp_name,int cp_age)
{
strcpy(name,cp_name);
age = cp_age;
}
anything(const anything& anything01)
{
strcpy(name, anything01.get_name());
age = anything01.get_age();
}
anything operator+ (const anything& anything01)
{
anything obj;
strcpy(obj.name, name);
strcat(obj.name, anything01.get_name());
obj.age = age + anything01.get_age();
}
friend ostream& operator<<(ostream &os, const anything &obj)
{
return os <<obj.get_name()<<" "<<obj.get_age();
}
~anything()
{
}
const char *get_name() const
{
return name;
}
int get_age() const
{
return age;
}
private:
char name[100];
int age;
};
class anything_sub:public anything{
public:
private:
int score;
};
int main()
{
int object_age = 19, object_age01=25, object_age02=30;
anything anything01("David", object_age);
cout << anything01 << endl;
anything anything02("Jackson",object_age01),anything03("Edward",object_age02),anything04;
anything04=anything02;
cout << anything04<<endl;
return 0;
}
D. sprintf打印cstring
和%s没关系的,
char sql[50];已经定义数组的话
全部输出要用循环一个一个字符的输出吧。 否则只会输出sql[0],就是admin的a
E. sqlstate=sprintf('select count(*) from temp where (x1 = %.7f ) and (x2 = %.7f )',a1,a2,b1,b2);
如果matlab中的数据变量a1(7位小数点)或者a2(6位)的值与数据库表temp中的字段x1的数值相等并且matlab中的数据变量b1(7位小数点)或者b2(6位)的值与temp中的字段x2的值相等,则将数据库表temp中的该记录的所有列以字符形式打印出来。其中a1和a2是同一个数,只是小数点位数不同罢了,同样b1和b2也是同一个数。不知道说明白了没有?
简而言之,就是在数据库中查找一条满足条件“x1==a1(a2)并且x2==b1(b2)”的记录。
F. sprintf(sqls, "dasi_insert %d, '%s %d:%d', %d, %d", vid, buf, hour,minu,ival,flags)什么意思
从你提问的形式可以看出,你提问的重点在sprintf(sqls, "%sdasi_insert %d, '%s %d:%d', %d, %d",hisdb, vid, buf, hour, minu, ival, flags)这句话,而这句话你不理解的地方应该是%sdasi_insert %d, '%s %d:%d', %d, %d",hisdb, vid, buf, hour, minu, ival, flags,执行了什么样的数据库操作?这又是什么SQL语句?从这句话的形式,用过存储过程的人可以很容易看出来dasi_insert是一个存储过程,所以,你要到你的数据库里去找这个存储过程,然后它要执行的操作就在这个存储过程里面。希望我理解力你的问题,希望我的答案对你有所帮助~
G. C语言环境下如何使用动态SQL
你真是牛人呀。数据库类型那么多,有oraclemysqlDB2SQLSQLsevera。你使用的那种。
相对于来说我使用oracle多。
给你一个pro*c的操作实例吧
/ 定义符号常数
#define USERNAME "SCOTT"
#define PASSWORD "x"
#include <stdio.h>
// 说明SQLCA和ORACA
EXEC SQL INCLUDE SQLCA;
EXEC SQL INCLUDE ORACA;
// 启用ORACLE通讯区:ORACA=YES,使它能被使用
EXEC ORACLE OPTION (ORACA=YES);
// 说明SQL变量
EXEC SQL BEGIN DECLARE SECTION;
char* username=USERNAME;
char* password=PASSWORD;
VARCHAR sqlstmt[80];
int emp_number;
VARCHAR emp_name[15];
VARCHAR job[50],job1[50],job2[50];
float salary;
EXEC SQL END DECLARE SECTION;
main()
{
EXEC SQL WHENEVER SQLERROR GOTO sqlerror;
// 发生错误时,保存SQL语句至ORACA
oraca.orastxtf=ORASTFERR;
// 登录到ORACLE
EXEC SQL CONNECT :username IDENTIFIED BY :password;
printf("/nConnect to ORACLE./n");
// 构造动态SQL语句
sqlstmt.len=sprintf(sqlstmt.arr,"INSERT INTO EMP(EMPNO,ENAME,JOB,SAL)VALUES(:V1,:V2,:V3,:V4)");
// 显示SQL语句
puts(sqlstmt.arr);
// 用PREPARE语句分析当前的动态INSERT语句,语句名是S
EXEC SQL PREPARE S FROM :sqlstmt;
// 循环插表
for(;;)
{
printf("/nEnter employee number:");
scanf("%d",&emp_number);
if(emp_number==0)break;
printf("/nEnter employee name:");
scanf("%s",&emp_name.arr);
emp_name.len=strlen(emp_name.arr);
printf("/nEnter employee job:");
scanf("%s",&job.arr);
job.len=strlen(job.arr);
salary = 0; // With VC6, Missing this line will cause C Run-Time Error R6002.
printf("/nEnter salary:");
scanf("%f",&salary);
EXEC SQL EXECUTE S USING :emp_number,:emp_name,:job,:salary;
}
// 提交事务,退出ORACLE
EXEC SQL COMMIT RELEASE;
printf("/nHave a good day!/n");
exit(0);
sqlerror:
// 打印错误信息
printf("/n%.*s/n",sqlca.sqlerrm.sqlerrml,sqlca.sqlerrm.sqlerrmc);
// 打印出错SQL语句
printf("/n/"%.*s.../"/n",oraca.orastxt.orastxtl,oraca.orastxt.orastxtc);
// 打印出错SQL语句所在行号及所在文件名
printf("on line %d of %.*s/n/n",oraca.oraslnr,
oraca.orasfnm.orasfnml,oraca.orasfnm.orasfnmc);
// 回滚事务,退出ORACLE
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK RELEASE;
exit(1);
}
H. 关于sql语句。这两句有什么不同。关于游标。
这两个是完全等价的。如果说有差别的话,那就是对第一种语句,存储引擎会下把它转化为第二种写法,然后执行,不过这在效率上几乎没区别。
高版本以后会停用第一种写法,第二种写法是sql标准语言。
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
vaela
I. SQLExecDirect 参数的sql语句中含有变量,应该怎样写
利用字符串拼接吧
SQLExecDirect(hstmt, "SELECT * FROM parts where partid ="+i, SQL_NTS)
J. 怎么用tsql语言表示如果一个变量为整数
1
2
int carc = 1000; /* 随便等于一个值 */
sprintf (sql, "update car set carcount=%d where ID=1", carc);
不过你是C++,如果是string类型,直接字符串加,做成流,方法太多了