2015-10-02 72 views
0

此sql语句不起作用。 EXEC(@strSql)后,我看到0或1作为结果,所以我继续使用IF语句,但它不像我预期的那样工作。它不会从IF声明中采取行动。 此外,有没有办法使查询动态,所以我可以检查多个表?Sql服务器:如何从sql字符串中获取值

Declare @strSql varchar(1000), 
@TableName varchar(100), 
@linkedServer varchar(100) 

Set @TableName='tablename' 
Set @linkedServer='linkservername' 
Set @strSql='Select count(1) as TabExists FROM DBC.TABLES WHERE 
     TABLEKIND=''T'' AND DATABASENAME=''databasename'' AND 
     TABLENAME=''tablename''' 
SET @strSql = N'select TabExists from OPENQUERY('[email protected]+', ''' + REPLACE(@strSql, '''', '''''') + ''')' 
EXEC (@strSql) 

IF @strSql = '0' --table not exist 
    create table 
IF @strSql = '1' --table exist 
delete data from table 
+0

我看不出你如何能指望'IF'不同的工作,您要指派给'@ strSql'这里的值:'SET @strSql = N 'select TabExists ....',然后你正在执行'IF @strSql ='0'......如果@ strSql ='1''当@ strSql'它显然不是0也不是1 – Lamak

+0

为什么是你用这种奇怪的方式检查表的存在? – ElenaDBA

+0

有没有更好的方法来检查?我检查的表在teradata环境中,我必须使用链接服务器。 – angelcake

回答

0

而是试图

DECLARE @SQL NVARCHAR(MAX) = '' 
DECLARE @TabExists BIT; 

Set @strSql = 'SELECT @TabExists = CASE WHEN TabExists = 0 THEN 0 ELSE 1 END 
     FROM OPENQUERY(' + QUOTENAME(@linkedServer) 
     + ', ''SELECT TabExists = COUNT(*) 
       FROM LinkedDB.INFORMATION_SCHEMA.TABLES 
       WHERE TABLE_NAME = ' + @TableName + ');'; 

EXECUTE sp_executesql @strSQL, N'@TabExists BIT OUTPUT', @TabExists OUT; 

IF (@TabExists = 0) 
BEGIN 
    -- create table 
END; 
+0

我检查的表格在teradata环境中,我必须使用链接的服务器。 – angelcake

+0

检查更新 – ElenaDBA

+0

由于错误,查询不起作用,并且很难确定错误来自哪里。 – angelcake