dbo.tab1 
dbo.[tab1] 
[dbo].[tab1]
这样写表名都是可以的假设上面三个都是字符串, 怎么才能截取到真正的表名tab1?
相当于是要写一个函数create function dbo.GetTableName
(
@tableName  nvarchar(250)
)returns nvarchar(150)
as
--.........
我遇到的难点是 sql server 貌似没有 RevCHARINDEX 函数; 而 PATINDEX 则存在 搜索通配符字符 的难题select PATINDEX ( '%[%]', '[schema1].[mytab2]' )
 

解决方案 »

  1.   

    表名直接取就可以了吧
    [tb]
    tb
    得到的都是tb
      

  2.   

    create table [tb](ID int)
    go
    select name
    from sys.tables
    where name='tb'
    go
    drop table [tb]
    /*
    name
    --------------------------------------------------------------------------------------------------------------------------------
    tb(1 個資料列受到影響)
    */
      

  3.   

    我指的是我传给你一些字符串, 如:'[schema1].[mytab2]'
    '[myschema].[tab1]'
    'dbo.tab1'你要能返回表名部分
      

  4.   

    to Angel1201:select name
    from sys.tables
    where name='dbo.tb'这样你就得不到表信息了吧
      

  5.   

    DECLARE @str VARCHAR(20)
    SET @str = '[dbo].[tab1]'IF (CHARINDEX('.',@str) > 0) SET @str = STUFF(@str,1,CHARINDEX('.',@str),'')
    IF (CHARINDEX('[',@str) > 0) SET @str = STUFF(@str,1,CHARINDEX('[',@str),'')
    IF (CHARINDEX(']',@str) > 0) SET @str = LEFT(@str,CHARINDEX(']',@str)-1)SELECT @str
      

  6.   

    if not object_id('tb') is null
    drop table tb
    Go
    Create table tb([col] nvarchar(18))
    Insert tb
    select N'[schema1].[mytab2]' union all
    select N'[myschema].[tab1]' union all
    select N'dbo.tab1'
    Go
    Select replace(replace(right([col],len([col])-charindex('.',[col])),']',''),'[','')
    from tb
    /*
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    mytab2
    tab1
    tab1(3 個資料列受到影響)
    */
      

  7.   


    -- sql 2005
    select PARSENAME('dbo.tab1',1);-- sql 2000
    declare @tabname sysname;
    set @tabname='dbo.tab1';
    select right(@tabname,charindex('.',reverse(@tabname))-1);
      

  8.   

    if not object_id('tb') is null
    drop table tb
    Go
    Create table tb([col] nvarchar(18))
    Insert tb
    select N'[schema1].[mytab2]' union all
    select N'[myschema].[tab1]' union all
    select N'dbo.tab1'
    Go
    select parsename([col],1) from tb
    /*
    --------------------------------------------------------------------------------------------------------------------------------
    mytab2
    tab1
    tab1(3 個資料列受到影響)
    */