2010-01-28 77 views
2

如何整數值爲nvarchar或varchar數據類型分配在存儲過程如何分配整數值爲nvarchar或varchar數據類型在存儲過程

DECLARE @SQLString nvarchar(max) 

SET @SQLString = N'declare @Identifier int; 
        SELECT COUNT(*) FROM ' + @batch+' where Identifier = @Identifier' 

我需要檢查@SQLString是否爲0或不。

即我想檢查-----> if(@SQLString = 0)。如何分配整數VAL爲nvarchar或varchar

+1

問題不明確。你想達到什麼目的?你想檢查批次中是否有行嗎?你是在聲明@Batch變量嗎,它是一個帶有表名稱的參數嗎? – 2010-01-28 06:18:03

回答

0

你設置@SQLString一個查詢...如果你想看看它的「0」,那麼你可以這樣做:

IF @SQLString = '0' 

但我認爲你正試圖找出是否有0行批處理中的,在這種情況下,您意味着更多的東西一樣:

DECLARE @Res TABLE (cnt int); 
INSERT @Res exec sp_executesql @SQLString; 

IF (SELECT MAX(cnt) FROM @Res) = 0 /* Means empty batch */ 
+0

行數*也可能在@@ ROWCOUNT中。 – Sascha 2010-01-28 06:20:41

+0

@@ ROWCOUNT爲1,計數。它必須是'SELECT 1 FROM the Table'來設置@@ ROWCOUNT。 – 2010-01-28 06:22:23

+0

亞我明白了。謝謝你們 – Innova 2010-01-28 06:25:20

0

將其轉換:

SET @var = CONVERT(VARCHAR,@intval)

薩沙

+0

如果您想檢查變量中是否有文本,則測試null,如果不是null,則使用LEN函數。 – Sascha 2010-01-28 06:19:42

0

我假設你正在嘗試檢查多少行動態SQL返回,你可以做這樣的事情:

DECLARE @SQLString nvarchar(max) 

SET @SQLString = N'declare @Identifier int; 
        SELECT * FROM ' + @batch+' where Identifier = @Identifier' 

exec @SQLString 

set @SQLString = @@ROWCOUNT 

if @SQLString = 0 
begin 
... 
end 
1

你可以嘗試像

DECLARE @IntVal INT, 
     @ParamDef NVARCHAR(MAX), 
     @SQLString nvarchar(max), 
     @batch VARCHAR(MAX) 

SELECT @batch = 'Batch', 
     @SQLString = N'SELECT @IntVal = COUNT(*) FROM ' + @batch, 
     @ParamDef = '@IntVal INT OUTPUT' 

EXECUTE sp_executesql @SQLString,@ParamDef, @[email protected] OUT 

SELECT @IntVal 

看一看sp_executesql (Transact-SQL)

+0

帶有輸出參數的sp_executesql爲+1。 -1不建議停止使用Count()來檢查是否沒有行。 -0.49用於聲明非常簡單的@ParamDef,它總是一個簡單的文字字符串。舍入= 0。 – ErikE 2010-01-28 21:39:59

1

我覺得這種方式爲b斯:

DECLARE 
    @Cnt int, 
    @SQL nvarchar(max), 
    @batch sysname, 
    @Identifier varchar(30) 

-- set @batch and @Identifier 

SET @SQL = 'SELECT @Cnt = Count(*) FROM ' + @batch 
    + ' WHERE Identifier = @Identifier' 
EXEC sp_executesql @SQL, N'@Cnt int OUT, @Identifier varchar(30)', 
    @Cnt OUT, @Identifier 
IF @Cnt = 0 BEGIN 
    --do something 
END 
ELSE BEGIN 
    --do something else 
END 

但如果你只關心它是否是0或者沒有,那麼你應該這樣做,而不是,它可以只發現一個行後停止,而不必,指望他們所有:

DECLARE 
    @HasRows bit, 
    @SQL nvarchar(max), 
    @batch sysname, 
    @Identifier varchar(30) 

-- set @batch and @Identifier 

SET @SQL = 'SET @HasRows = CASE WHEN EXISTS (SELECT 1 FROM ' 
    + @batch + ' WHERE Identifier = @Identifier) THEN 1 ELSE 0 END' 
EXEC sp_executesql @SQL, N'@HasRows bit OUT, @Identifier varchar(30)', 
    @HasRows OUT, @Identifier 
IF @HasRows = 0 BEGIN 
    --do something 
END 
ELSE BEGIN 
    --do something else 
END 

但是,如果有任何方法可以避免使用動態SQL和更改表名,那最好。那麼這是一個簡單的查詢:

IF NOT EXISTS (SELECT 1 FROM TableName WHERE Identifier = @Identifier) BEGIN 
    -- do something 
END 
相關問題