【发布时间】:2019-12-12 12:44:30
【问题描述】:
我试图做一个存储过程,声明变量并设置它的值,但它显示的值与我设置的值不同。
CREATE PROCEDURE [dbo].[sp_InsertAccount]
@OldAccount AS VARCHAR(25),
@NewAccount AS VARCHAR(25),
@TableName AS VARCHAR(25)
AS
DECLARE @SQL VARCHAR(MAX)
DECLARE @TableName_ sysname
SET @OldAccount = '7006-0090-0280'
SET @NewAccount ='5555-0090-0280'
SET @TableName_ = 'cust'
SELECT @NewAccount
SELECT @SQL = COALESCE(@SQL + ', ', '') + Name
FROM sys.columns
WHERE OBJECT_ID = OBJECT_ID(@TableName_)
AND name NOT IN ('custnum');
SELECT @SQL = 'SELECT '+ @NewAccount+','+@OldAccount+',' + @SQL + ' FROM ' + @TableName_+' where custnum ='''+@OldAccount+''''
EXEC (@SQL)
GO
【问题讨论】:
-
这里有一个提示:
5555 - 90 - 280 = 5185和7006 - 90 - 280 = 6636。 -
@ErikPhilips..哦,它变成了一个公式?...即使我将其声明为 varchar....您可以提供任何解决方案吗?...谢谢
-
它是动态 SQL,它周围没有单引号,因此它假定它是数学。基本上你说的是
Select 5555 - 90 - 280而不是Select '5555-0090-0280'。话虽如此,最好使用parameterized query。 -
SELECT @SQL = 'SELECT '''+ @NewAccount+''', '''+@OldAccount+''',' + @SQL + ' FROM ' + @TableName_+' where custnum ='''+@OldAccount+'''' -
现在知道了,谢谢..您可以添加上一条评论作为答案。并且不赞成它谢谢
标签: sql sql-server