2015-10-02 68 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