日期:2014-05-18  浏览次数:20617 次

SQLSERVER 执行函数
从网上找了个函数
SQL code


if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_convert]') and xtype in (N'FN', N'IF', N'TF'))   
  drop function [dbo].[f_convert]   
GO   
    
  /*--全角/半角转换   
    
  转换说明   
  全角字符从的unicode编码从65281~65374   
  半角字符从的unicode编码从       33~126   
  空格比较特殊,全角为   12288,半角为   32   
  而且除空格外,全角/半角按unicode编码排序在顺序上是对应的   
  所以可以直接通过用+-法来处理非空格数据,对空格单独处理   
  like的时候,指定排序规则   COLLATE   Latin1_General_BIN   
  是保证字符顺序按unicode编码排序  

    
  declare   @s1   varchar(8000)   
  select   @s1='中    2-3456a78STUVabn中国opwxyz'   
  select   dbo.f_convert(@s1,0),dbo.f_convert(@s1,1)   
  */   
  Create   FUNCTION   f_Convert(   
      @str   NVARCHAR(4000),   --要转换的字符串   
      @flag   bit              --转换标志,0转换成半角,1转换成全角   
  )RETURNS   nvarchar(4000)   
  AS   
  BEGIN   
      DECLARE 
          @pat nvarchar(8),
          @step int,
          @i int,
          @spc int   
      IF @flag=0   
        Select @pat=N'%[!-~]%',@step=-65248,   
        @str=REPLACE(@str,N' ',N'   ')   
      ELSE   
        Select @pat=N'%[!-~]%',@step=65248,   
        @str=REPLACE(@str,N'   ',N' ')   
        SET @i=PATINDEX(@pat COLLATE LATIN1_GENERAL_BIN,@str)   
        WHILE @i>0
        Select @str=REPLACE(@str,   
        SUBSTRING(@str,@i,1),   
         NCHAR(UNICODE(SUBSTRING(@str,@i,1))+@step))   
        ,@i=PATINDEX(@pat COLLATE LATIN1_GENERAL_BIN,@str)   
        RETURN(@str)   
  END   
  GO  

declare @s1 varchar(8000)   
  set @s1='中    2-3456a78STUVabn中国opwxyz'  
  select dbo.f_Convert(@s1,0),dbo.f_Convert(@s1,1)  




为什么在数据库里无法执行 报错信息如下:

消息 4121,级别 16,状态 1,第 3 行
找不到列 "dbo" 或用户定义的函数或聚合 "dbo.f_Convert",或者名称不明确。

双节提示信息 定位到 select dbo.f_Convert(@s1,0),dbo.f_Convert(@s1,1) 这一行

------解决方案--------------------
看下这个函数所属的架构是什么
------解决方案--------------------
沒有創建到這個函數?

檢查用戶名權限
------解决方案--------------------
dbo.f_Convert

DBO是架构名 后面的f_Convert是函数名

如果架构不是DBO 你的就错误了
------解决方案--------------------
右键安全性--登录名--属性--用户映射
------解决方案--------------------
[ad0039999].[f_Convert]
------解决方案--------------------
实在不知道就去数据库里找函数--编写函数脚本--create到新的。。。自己看看