update的一个高级用法(mssql2000)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了update的一个高级用法(mssql2000)相关的知识,希望对你有一定的参考价值。

表i_supply中有列sd_id,sd_description,new三列
现在需要把new列的值修改下,new列的值是一个语句 :insert into content(id,content) vlaues (‘这里需要对应的该行的sd_id的值’,‘这里需要的是对应的该行的Description的值’)
不知道该怎么写了,求教。
new列存储的是text格式的语句。与语句本身什么意思无关。就是单纯的语句
insert into content(id,content) vlaues (‘这里需要对该行的sd_id的值’,‘这里需要该行的Description的值’)

update i_supply a set a.new= (select "insert into content(id,content)("+b.sd_id+","+b.sd_description+")" from i_supply b where a.sd_id=b.sd_id and rownum=1)
看看行不行
参考技术A update i_supply a set a.new= (select "insert into content(id,content)("+b.sd_id+","+b.sd_description+")" from i_supply b where a.sd_id=b.sd_id) 参考技术B 最近在弄一个站,用的是asp+mssql的版本,可我对mssql并不是很熟悉,怎么办呢。我担心未来做站,数据丢失,虽然IDC那边可以给备案,可那样也不能保证万无一失,所以,我觉得应该趁着这几天有空,把MSSQL的备份,以及还原学一下。说实话,我到现在对服务器还是个小白,什么都不太懂,一直在学习,我准备把自己的问题整理一下,以便未来可以随时找到,而且需要的人也可以看看。

好了,进入正题。

MSSQL错误:21002是怎么回事?

很多人现在在用VPS,或者服务器,那么MSSQL经常备份是必须的了,可在将数据转移到其它服务器上的时候,进行数据还原后,建立一个登录的时候,会出现“错误 21002: [SQL-DMO]用户“XXX”已经存在”的现象。

这种情况一般是因为你之前备份的数据库也有一个“XXX”用户,你打开这个数据库,点击用户,在右边列表中,如果有“XXX”这个用户,但登录名没有的话,说明是这种情况,你直接把它删了,再新建登录就可以了。注意上面说的是“用户”已经存在,而不是“登录”已经存在,所以在登录列表中没有“XXX”。

现在就好了吗?NO,不要急,接着看。

有时候,在删除那个用户的时候,会弹出“包含有对象,不能删除”,“扯蛋的人”在删除的时候也出现了这个错误,如何解决?

这种情况,只有直接从系统表里删除该用户了。打开MSSQL查询分析器:

exec sp_configure 'allow updates', 1
reconfigure with override
第一句是执行存储过程sp_configure,允许更新系统表。
第二句是使上面的更新立即生效。由于不建议更新系统表,如果不加with override来强制更新,SQL Server会拒绝它。

允许更新系统表了,执行下面的语句就可以删除用户了。
use [所操作的数据库]
delete from sysusers where name='要删除的用户名'

最后还原为禁止更新系统表。
exec sp_configure 'allow updates', 0
reconfigure with override

注意:以上三段代码分三次执行,不能一次执行。

这样,再打开MSSQL,看看你的数据库中,还有没有“XXX”这个用户了!

原创文章请注明转载自SoL's Blog,本文地址:

===================================
刚刚帮你找了一下。看下吧,希望对你有帮助。

[SQL] MSSQL update 语句中的关联

将tableA 表中的所有title 用tableB中的titlename 更新掉,如果tableB中存在对应的关系

update tableA as a

set a.title = (select b.titlename from tableB as b where a.id =b.xid)

 

上面的写法,无法在MSSQL中进行执行,因此

我们可以使用函数变相 脚本 

 

传入参数相同

 

update tableA

set title =fn_getXTitle(id)

 

fn_getXTitle

ALTER FUNCTION [dbo].[fn_getXTitle]
(
  @id nVARCHAR(50)
) 
RETURNS  nVARCHAR (50)

AS
BEGIN
declare @title nvarchar(50)
    set @title =select b.titlename from tableB as b where b.xid =@id

RETURN @title

end

传入参数不同

 

 --创建功能函数

create FUNCTION [dbo].[fn_getdatafromoldve]
(
  @OLDVE nVARCHAR(50)  
  ,@Type nVARCHAR(50) 
) 
RETURNS  nVARCHAR (50)
AS
BEGIN
declare @BO_ID nvarchar(50)
declare @NEWVE nvarchar(50)
declare @PjtNO_X nvarchar(50)


IF @TYPE =M  
  BEGIN
  set @NEWVE =(select top 1 NEWVE from [XXXX].[dbo].[MIG_MAPPING1] where OLDVE =@OLDVE and FIELDNAME=PSPIX)
  if @NEWVE is not null
  begin
   set @BO_ID =(select top 1 BO_ID from [XXXX].[dbo].[MIG_ORDER_BASE] WHERE ORDER_ID =@NEWVE)
   if @BO_ID is not null 
   begin
    RETURN @BO_ID
   end 
   else
   begin
    RETURN @OLDVE
   end
   
   
  end
  else
   begin
    RETURN @OLDVE
   end
  END
IF @TYPE =P 
  BEGIN
  set @NEWVE =(select top 1 NEWVE from [XXXX].[dbo].[MIG_MAPPING1] where OLDVE =@OLDVE and FIELDNAME =PSPID)
  if @NEWVE is not null 
   begin
    RETURN @NEWVE
   end 
   else
   begin
    RETURN @OLDVE
   end
  
   
  END
IF @TYPE =PX 
  BEGIN
  set @PjtNO_X =(select top 1 NEWVE from [XXXX].[dbo].[MIG_MAPPING1] where OLDVE =@OLDVE and FIELDNAME =PSPIX)
  
    if @PjtNO_X is not null 
   begin
    RETURN @PjtNO_X
   end 
   else
   begin
    RETURN @OLDVE
   end
    
  END  


RETURN @OLDVE
END
--执行的脚本
UPDATE [XXXX].[dbo].[tb_PrjMethod] set [PjtNo]=[dbo].[fn_getdatafromoldve](PjtNo,P)    

 

以上是关于update的一个高级用法(mssql2000)的主要内容,如果未能解决你的问题,请参考以下文章

如何确定一个列是不是是 MSSQL 2000 中的标识列?

SQL里面update 的用法

mssql 怎么整合多个 update成一个sql语句。

sql server 2000安装程序配置服务器失败

mssql update from

/opt/mssql/bin/sqlservr:这个程序需要一台至少有 2000 兆内存的机器