首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > VFP >

SQL表用代码设置默认值,奇了怪!解决办法

2012-02-24 
SQL表用代码设置默认值,奇了怪!第一次用代码自动设置SQL表默认值,全部有效,将表名不同但字段相同的同一数

SQL表用代码设置默认值,奇了怪!
第一次用代码自动设置SQL表默认值,全部有效,将表名不同但字段相同的同一数据库下的另一表再运行代码,全部无效,如将另一表改动几个不同的字段名称,改动的有效。就是已经设置过默认值的,不管是另一个表只要字段名称相同就无法自动设置默认值,这SQL是到底是这么规定的,那儿出了问题,有请高手帮忙,谢谢!

自动设置默认值代码如下:

SQLEXEC(nhandle,"select * from ckckzz","tmp1")
SELECT tmp1
COPY STRUCTURE EXTENDED TO FileName  
USE FileName  
SCAN
  kk=ALLTRIM(field_name)
  DO case
  CASE field_type="C"
  SQLEXEC(nhandle,"alter table ckckzz add CONSTRAINT &kk default space(2) for &kk") &&字符型默认为二个空格
  CASE field_type="N" OR field_type="L"
  SQLEXEC(nhandle,"alter table ckckzz add CONSTRAINT &kk default 0 for &kk") &&数值型或逻辑型默认为0
  ENDCASE
ENDSCAN

[解决办法]
alter table ckckzz add CONSTRAINT &kk default space(2) for &kk

其实你注意一下语法中这个 &kk 是什么意义就明白了。

ALTER TALBE ...ADD CONSTRAINT constraint_name DEFAULT constant_expression FOR column 
红字部分对应的是约束名,而约束名在数据库中是不可以重复的。 你可以在字段名前再加个表名一同构成约束名。
[解决办法]

探讨
谢谢楼上,我加了数据表名还是无效。
直接打开表设置是可以的,是否说明不同的表,同名约束是可以的
为什么用代码设置就不可以了
因为我有很多的表要设置默认值,但总有几个表有几个字段相同的,麻烦不小,我要去检查
如没有设置默认值,后台到前台搞个NULL,统计时就有麻烦了,所以我一定要全部设置好
还请高手指点迷津,谢谢!


[解决办法]
请参考:

Set Talk Off
Set Safe Off
Public nhandle
nhandle=Sqlstringconnect("driver=sql server;server=yjr;uid=sa;pwd=12;database=msgl")
If nhandle<=0
Messagebox("连接失败")
Return
Endif
SQLExec(nhandle,"select * from ckckzz","tmp1")
Select tmp1
Copy Structure Extended To FileName
Use FileName
*Brow
lcTableName='ckckzz1' &&第一个表名,此处改为你的实际表名
Scan
kk1=lcTableName+"_"+Alltrim(field_name)
kk2=Alltrim(field_name)
Do Case
Case field_type="C"
SQLExec(nhandle,"alter table &lcTableName. drop CONSTRAINT &kk1.") &&删除,防止多次运行
SQLExec(nhandle,"alter table &lcTableName. add CONSTRAINT &kk1. default ' ' for &kk2.") &&字符型默认为二个空格
Case field_type="N" Or field_type="L"
SQLExec(nhandle,"alter table &lcTableName. drop CONSTRAINT &kk1.") &&删除,防止多次运行
SQLExec(nhandle,"alter table &lcTableName. add CONSTRAINT &kk1. default 0 for &kk2.") &&数值型或逻辑型默认为0
Endcase
Endscan
lcTableName='ckckzz2' &&第二个表名,此处改为你的实际表名,与第一个表名字段一样
Scan
kk1=lcTableName+"_"+Alltrim(field_name)
kk2=Alltrim(field_name)
Do Case
Case field_type="C"
SQLExec(nhandle,"alter table &lcTableName. drop CONSTRAINT &kk1.") &&删除,防止多次运行
SQLExec(nhandle,"alter table &lcTableName. add CONSTRAINT &kk1. default ' ' for &kk2.") &&字符型默认为二个空格
Case field_type="N" Or field_type="L"
SQLExec(nhandle,"alter table &lcTableName. drop CONSTRAINT &kk1.") &&删除,防止多次运行
SQLExec(nhandle,"alter table &lcTableName. add CONSTRAINT &kk1. default 0 for &kk2.") &&数值型或逻辑型默认为0
Endcase
Endscan

[解决办法]
探讨
同一数据库内部不允许同名约束,在帮助中找不到理论支持

热点排行