如何将整数值分配给存储过程中的nvarchar或varchar数据类型

时间:2010-01-28 06:10:51

标签: sql-server stored-procedures

如何将整数值分配给存储过程中的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

5 个答案:

答案 0 :(得分: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, @IntVal=@IntVal OUT

SELECT @IntVal

查看sp_executesql (Transact-SQL)

答案 1 :(得分:1)

我认为这种方式最好:

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

答案 2 :(得分:0)

转换它:

SET @var = CONVERT(VARCHAR,@ intval)

的Sascha

答案 3 :(得分: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 */

答案 4 :(得分: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