0

我正在尝试创建一个用新主键填充表的 SQL 脚本。

我目前从互联网搜索中获得的内容如下

DECLARE @IntVariable int;
DECLARE @Stringkey varchar(2);
DECLARE @SQLString nvarchar(500);
DECLARE @Intupdater nvarchar(500);

SET @IntVariable = 00000001;
SET @Stringkey = 'CD';

SET @SQLString = N'UPDATE Tri_Damen_Live.trimergo.calendar_details SET details_key = @Stringkey + @IntVariable';
SET @Intupdater = N'@IntVariable = @IntVariable+1'

EXECUTE sp_executesql @SQLString , N'@IntVariable INT' , N'@Stringkey VARCHAR(2)', @IntVariable, @Stringkey;

我得到的错误是

消息 102,级别 15,状态 1,第 1 行
'=' 附近的语法不正确。
Msg 137, Level 15, State 2, Line 1
必须声明标量变量“@Stringkey”。

我有几个关于我的问题的问题,希望有人能帮助我

第一个问题:看来我的int增量器是错误的。有没有办法为 int 制作更新变量语句?

第二:我将 int 声明为 00000001。但我怀疑它是否会保持这种状态。我这样做的原因是因为密钥总共需要 10 个字符长(例如“CD00000001”等)这样工作还是有其他方法?

第三个问题:如主题所述。'必须声明标量变量“@Stringkey”。错误。我已经删除了 stringkey 部分,但它说关于Int变量的相同错误。我将它们声明在顶部并设置它们。我错过了什么?

侧面资料:

此函数将用于具有不同表大小的多个数据库。所以我需要这种函数来说明它没有固定数量的更新语句。

此处创建的主键必须是Varchar(10)长度始终为 10 个字符的字符串 ( )。看起来像一个愚蠢的要求,但它已被选择使用这个系统。

我正在使用 Microsoft SQL Server 2012 来运行它。

4

3 回答 3

3

1 您不能将 int 添加到这样的字符串中。您需要将 转换int为字符串

   @Stringkey + convert(varchar(10),@IntVariable)

2 int 是一个数字。如果你希望它被格式化,你需要自己做。

   SET details_key = @Stringkey + right(''0000000000''+convert(varchar(8),@IntVariable),8)

3 你的变量声明sp_executesql应该是

N'@IntVariable INT, @Stringkey VARCHAR(2)'

IE

EXECUTE sp_executesql @SQLString , N'@IntVariable INT, @Stringkey VARCHAR(2)', @IntVariable, @Stringkey;

或者,您可以考虑使用SEQUENCE- 请参阅http://raresql.com/2013/06/21/sql-server-2012-how-to-generate-a-varchar-sequence-number-using-sequence-object/

于 2013-09-16T08:29:25.523 回答
1

第二个参数sp_executesql应该是一个包含所有参数定义的字符串:

EXECUTE sp_executesql @SQLString , N'@IntVariable INT,@Stringkey VARCHAR(2)', @IntVariable, @Stringkey;
于 2013-09-16T08:28:26.090 回答
0
SET @SQLString = N'UPDATE Tri_Damen_Live.trimergo.calendar_details SET details_key = @Stringkey + @IntVariable';

您正在尝试 concat @Stringkey + @IntVariable=> (string + int)您应该将@IntVariable转换为 varchar

于 2013-09-16T08:29:46.320 回答