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