我需要帮助编写存储过程

时间:2015-03-30 19:15:45

标签: sql sql-server database tsql stored-procedures

现在我是否使用将社会安全号码存储为单个事务的列更新多个表?我有超过70个表用正确的ssn更新ssn。

严格按要求更新。偶尔,我会在第一次在我们的网站上注册时,错误地输入他们的ssn的客户接到电话。当我收到这样的请求时,我手动更新存储有关客户信息的每个数据库表中的所有ssn。使用ssn列逐个更新70多个表是一项非常繁琐的任务。有没有人知道如何有效地做到这一点?有人能告诉我如何编写我可以在旧SSN和新SSN中传递的存储过程然后相应地更新70个表吗?

是否有人有蓝图,演示如何编写存储过程?

TableName  ColumnName
table1      colA
table2      colB
table3      colC
table4      cold

我查询INFORMATION_SCHEMA.COLUMNS视图以检索所有具有ssn列的表,如上所示。

2 个答案:

答案 0 :(得分:0)

如果已存在多个存储过程,则可以执行这些存储过程,或者可以在新存储过程中为每个表编写更新脚本,类似于此结构。

DECLARE @OldSSN VARCHAR(9) = "00000000",
        @NewSSN VARCHAR(9) = "00000001"

UPDATE TableName1
SET SSN = @NewSSN
WHERE SSN = @OldSSN

UPDATE TableName2
SET SSN = @NewSSN
WHERE SSN = @OldSSN

正如Blam所说,出于这个原因,将SSN列在多个表中是不好的做法。最好有一个带有SSN的Client表,然后在所有其他表中使用新创建的ClientId。

答案 1 :(得分:0)

使用此选项生成所有更新。您可能需要调整WHERE子句。

SELECT 
    'UPDATE [' + TABLE_SCHEMA + '].[' + TABLE_NAME + '] SET [' + Column_Name + ']=@NewSSN WHERE [' + Column_Name + ']=@OldSSN;'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE Column_Name ='SSN'
  1. 创建一个接受@OldSSN和@NewSSN作为参数的存储过程。
  2. 粘贴上面的SQL。
  3. 包含交易